2011-02-11 41 views
0

我有非常簡單的結構化數據,目前以家庭自制文件格式存儲,但我想知道是否應該遷移到更現代化的東西。數據僅爲double s的一個表格,由double列索引。我需要執行的操作是:關於我的數據存儲問題的意見(數據庫/自制解決方案)

  • 遍歷表遍歷。
  • 插入和刪除任意記錄。
  • 在給定鍵值(鍵可能不在數據庫中)之前和之後選擇給定數量的行。

的要求是:

  • 存儲必須基於文件的無服務器是。
  • 應該不需要將整個文件讀入內存。
  • 生成的文件應該可以在不同的體系結構之間進行移植(端到端...)
  • 必須是一個非常穩定的項目(數據非常關鍵)。
  • 必須在Solaris/SPARC上運行,最好在Linux/x64上運行。
  • 訪問時間應儘可能快。
  • 必須作爲C++庫提供。 Fortran和Python綁定的加分點:)
  • 可選的精度更高的數字表示形式比雙精度更具優勢。
  • 相對緊湊的存儲大小也是一種獎勵。如果SQLite是不夠快

從我有限的經驗,源碼將是一個有趣的選擇,或在非服務器模式或許MySQL的。但是,也許一個成熟的SQL數據庫是矯枉過正的?

你有什麼建議?

+0

是否所有的值都可以存儲在內存中?如果是的話,那麼`std :: map `或者`std :: vector >`可以做到這一點。 – 2011-02-11 09:08:24

+0

不,對不起,我應該更清楚一點:我正在尋找持久存儲。此外,行可以具有任意長度(但每個表的固定長度),除索引外,它們不僅包含一個double。 – lytenyn 2011-02-11 09:12:02

回答

1

SQLite幾乎可以滿足您的所有需求,而且使用起來並不困難。試一試!

  • 它是基於文件的,整個數據庫是單個文件。

  • 它不需要將整個文件讀入內存。數據庫大小可能有限;你應該check here如果限制將是你的情況下的問題。

  • 格式是cross-platform

    SQLite數據庫是跨越32位和64位機器和大端和小端的體系結構之間移植。

  • 它已經存在了很長時間,並在很多地方使用,並且通常被認爲是成熟穩定的。

  • 它非常便攜,可在Solaris/SPARC和Linux/x64上運行。

  • 這是faster than MySQL(雖然存在於該鏈接後面的鹽粒)或其他此類數據庫服務器,因爲只需要考慮一個客戶端。

  • 有一個C++ APIa Python bindinga Fortran wrapper

  • 沒有任意精度柱的類型,但NUMERIC將被默默地轉換爲文本,如果它不能被精確地表示:

    文本和REAL存儲類之間的轉換時,SQLite認爲轉化爲如果保留數字的前15位十進制數字,則無損和可逆。如果無法將TEXT無損轉換爲INTEGER或REAL,則該值將使用TEXT存儲類進行存儲。

  • 緊湊的數據庫存儲,我不確定。但是我從來沒有聽說過SQLite會特別浪費。

相關問題