簡體   English   中英

在NoSQL中存儲動態數據

[英]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,但我對如何存儲這種非結構化數據有點困惑:

  1. 序列化為JSON並存儲在MySQL中
  2. 使用NoSQL

我的要求是高讀取,平均更新,平均插入和無刪除 不需要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存儲在那里。 您無法直接查詢該字段,但可以在文本字段旁邊創建可查詢的靜態字段。

將另一個系統引入混合中絕對不是一件容易的事。

一些原因:

  1. 文檔建模有很高的學習曲線。 你不規范化,你對數據進行非規范化 - 這樣做有點藝術。
  2. 配置完CouchDB和MongoDB集群之后,我可以告訴你這不是一件容易的事 - 特別是當你轉向生產時。
  3. 數據庫技術查詢肯定是非常重要的。

我只會介紹一個單獨的NoSQL解決方案作為最后的手段。

暫無
暫無

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

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