簡體   English   中英

沒有文件系統的鍵值存儲?

[英]Key Value storage without a file system?

我正在開發一個應用程序,我們在其中編寫了很多鍵值對。 在生產中,數據庫大小將達到數百TB,甚至多個PB。 密鑰為20個字節,最大值為128 KB,很少小於4 KB。 現在,我們正在使用MongoDB。 性能不是很好,因為顯然這里有很多開銷。 MongoDB寫入文件系統,然后寫入LVM,然后進一步寫入RAID 6陣列。

由於我們的要求非常基礎,因此我認為使用通用數據庫系統會影響性能。 我當時正在考慮實現一個簡單的數據庫系統,在該系統中,我們可以將文檔(或“值”)直接放置到原始驅動器(實際上是RAID陣列)中,並存儲鍵(以及指向該值在原始位置的指針)硬盤)存儲在由SSD支持的快速內存數據庫中。 這也將加快讀取速度,因為不會出現碎片(與使用文件系統相反)。

盡管很少刪除文檔,但我們仍然必須維護設備上的可用空間池(文件系統原本可以提供的空間)。

我的問題是,這真的可以提供任何重大改進嗎? 另外,是否有任何文件存儲系統會執行類似的操作? 或類似的東西,我們可以作為開始使用?

Apache Cassandra突然出現。 這是當前考慮到大規模擴展的NoSQL解決方案。 它看到了一些具有大規模擴展需求的大型公司的生產使用情況 經過一些努力,我可以說它需要一點時間來重新考慮您的數據模型以適應其存儲引擎的布置方式。 著名的文章“ WTF是超級列”對此進行了很好的介紹。 警告:僅當您計划存儲海量數據集和進行分發而沒有單點故障時,Cassandra才真正有意義。 用您解釋數據的方式,聽起來很合適。

另外,您是否至少考慮過Redis的保存關鍵參考? 您的內存需求遠遠超過了單個實例可以處理的需求,但是Redis也可以配置為分片。 它不是主要用例,但可以在Craigslist和Groupon上看到生產用途

另外,您是否已盡一切可能優化mongo,尤其是研究如何改善索引編制? Mongo確實可以保存到磁盤上,但是如果可以優化的話,應該將性能最好的部分保留在內存中,以保持性能。

如果數據不是太短暫,是否可以緩存該數據?

我會完全警告您,不要自己動手做這件事。 只是一個公平的警告。 這並不是敲擊您或其他任何人,只是我個人必須維護由內部開發人員編寫的自定義“數據索引”,而這些開發人員之前已經過了頭。 在我的工作中,我們擁有大量的磁盤鍵值存儲,這是我們系統中的主要性能瓶頸,由開發人員編寫,此開發人員此后與公司分離。 將這樣的解決方案卡在當今令人興奮的NoSQL機會中,這真令人沮喪。 像我上面引用的項目一樣,這些項目利用了開源社區的整體實力來證明和優化其使用。 除非您花費大量時間,精力和升級,否則您將無法在自己的解決方案上工作。 至少, 我鼓勵您查看所有的nosql選項,並也許找到一個您可以貢獻的項目,而不是自己動手做。 編寫數據庫服務器本身絕對是一項艱巨的任務,需要龐大的團隊,尤其是您已經給出了要求(但是如果最終這樣做,祝您好運!=))

答案較晚,但為將來參考,我認為Spider會這樣做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM