[英]Storing dynamic data in NoSQL
我有一個場景,我需要存儲非結構化數據,但我的其余數據是結構化和關系型的。 非結構化數據類型的示例如下所述:
User Type 1:
How do you blah blah : 5 fields
User Type 2 :
How do you blah blah : 3 fields
User Type 3 :
How do you blah blah : 7 fields
所有3種類型都被問到相同的問題“你怎么說等等”,但每個用戶類型使用不同數量的字段來回答它。 並且可以有許多不同的用戶類型 。
對於關系數據,我正在使用MySQL,但我對如何存儲這種非結構化數據有點困惑:
我的要求是高讀取,平均更新,平均插入和無刪除 。 不需要JOINS。 我需要有保證的寫入和高可用性。 如果我選擇NoSQL,根據CAP定理它將是一個AP類型。 我不會很快就會達到數百萬條記錄。
我還計划在將來提供這些數據的文本搜索 ,但它不需要是實時搜索,因此我總是可以定期使用Lucene索引數據。 但是,當然, 基於文檔的NoSQL實現確實提供了開箱即用的功能。 但是我已經在一些地方讀過,人們建議不要在MySQL中存儲JSON數據 。 但是添加NoSQL層可能會有點過分。
我該怎么辦?如果你建議我去NoSQL DB,我應該選擇哪一個?
編輯:為了澄清,我不需要查詢我正在存儲的數據中的特定字段。 如果我需要數據,那么我將需要整個數據,而不是特定字段。 我確實需要全文搜索,我也可以使用Lucene在MySQL上完成。
您可以通過使用行ID和單個文本列使其與MySQL一起使用,但是您將無法查詢字段。 你也可以考慮表繼承,但如果你有很多類型,這將是一個爛攤子。 最重要的是,您有充分的理由考慮替代解決方案而不是彎曲關系數據庫。
所以從你所說的,我認為它確實是多語言持久性的一個很好的用例。 話雖如此,MySQL + NoSQL會增加應用程序的整體復雜性,因此您需要確保抽象兩個數據訪問層。
對於數據庫選擇,面向文檔的解決方案在查看數據(動態,隔離聚合)時看起來非常合適。 我會查看MongoDB或CouchDB,即使第二個選項看起來更合適( AP,Master / master,Lucene集成...... )。
編輯:見評論。
我最近在一個大量使用SQL Server,MySQL和Mongo的平台上工作。 我們存儲的數據分布在這三個數據庫系統中。
它讓我渴望只有一種數據庫技術。
我會根據經驗建議只創建一個文本字段並將JSON存儲在那里。 您無法直接查詢該字段,但可以在文本字段旁邊創建可查詢的靜態字段。
將另一個系統引入混合中絕對不是一件容易的事。
一些原因:
我只會介紹一個單獨的NoSQL解決方案作為最后的手段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.