Database-Recommendation
儲存數十億行沒有關係
我每天都會收到一大組 CSV 文件。此外,我有 10 億條數據記錄(來自那些 CSV 文件),但它不是一個固定數字(每天 1b 條記錄)。它們會越來越大,我需要將它們儲存在數據庫中。還有一些額外的點:
- 沒有更新
- 沒有加入和關係
- 選擇一堆行並分組
- 寫入密集度是讀取的9倍(我們不需要讀取數據它必須是數據的儲存)
- 我不需要標準化
我在 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