Database-Recommendation

儲存數十億行沒有關係

  • December 23, 2016

我每天都會收到一大組 CSV 文件。此外,我有 10 億條數據記錄(來自那些 CSV 文件),但它不是一個固定數字(每天 1b 條記錄)。它們會越來越大,我需要將它們儲存在數據庫中。還有一些額外的點:

  1. 沒有更新
  2. 沒有加入和關係
  3. 選擇一堆行並分組
  4. 寫入密集度是讀取的9倍(我們不需要讀取數據它必須是數據的儲存)
  5. 我不需要標準化

我在 MySQL InnoDB 和 MyISAM 之間有一個長凳。MyISAM 比 InnoDB 更好(因為我沒有規範化)但 MySQL 不是一個好方法,因為我沒有關係。

我還檢查了 MongoDB,最終它佔用了 50GB 的數據並使用了 150Gb 的儲存磁碟!

所以我認為我需要一個 NoSQL DB 可以進行分佈式寫入並支持以上額外點。你喜歡哪個?

我知道我可以使用 CSV 文件,但我需要一種 db 方法而不是文件方法。我有很多工具和優勢,例如數據庫中的版本更新、錯誤修復、安全性、讀寫性能、副本等。我不能在 CSV 文件中有 group by(或 where,…)之類的東西,我沒有時間用 CSV 文件實現它們。

您似乎有一些分析數據。所以基本上你只需要一個列式數據庫。例如:

  • 開源(NoSQL):druid.io
  • 商業現場(SQL & NoSQL):MemSQL、VoltDB等
  • SAAS:亞馬遜 Redshift、Google BigQuery

它們具有僅附加語義,存檔您的內容以節省空間,可以按查詢分組(在 druid.io 中稱為時間序列查詢),並使用 CPU 進行查詢並透明地擴展到 PB 級數據。

我用 MySql 做了類似的事情,你可以直接在 MySQL 中保存 CSV 文件。我認為 Apache Cassandra 對你來說是個不錯的選擇

  • CQL3 是非常相似的 SQL,但有一些來自可伸縮性的限制(最值得注意的是:沒有 JOIN,沒有聚合函式。)
  • CQL3 現在是官方介面。不要看 Thrift,除非您正在開發舊版應用程序。這樣一來,你可以在

不了解 ColumnFamilies、SuperColumns 等的情況下生活。

  • 通過鍵或鍵範圍查詢(二級索引也可用)
  • 分發和複製的可調權衡(N、R、W)
  • 數據可以有過期時間(在 INSERT 上設置)。
  • 寫入可能比讀取快得多(當讀取是磁碟綁定時)
  • 使用 Apache Hadoop 可以進行映射/減少
  • 所有節點都是相似的,而不是 Hadoop/HBase
  • 非常好的和可靠的跨數據中心複製
  • 分佈式計數器數據類型。
  • 您可以用 Java 編寫觸發器。

您可以在這裡看到 NoSQL 數據庫之間的區別 http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

引用自:https://dba.stackexchange.com/questions/138611