nosql中文 - nosql優點




好的理由不使用關係數據庫? (14)

您能否指出其他數據存儲工具,並給出充分理由使用它們而不是古老的關係數據庫? 在我看來,大多數應用程序很少使用SQL的全部功能 - 看看如何構建一個無SQL的應用程序會很有趣。


自定義(手寫)存儲引擎/在所需用例中可能具有非常高的性能

http://www.hdfgroup.org/

如果您擁有龐大的數據集,則可以使用HDF(分層數據格式)而不是滾動自己的數據集。

http://en.wikipedia.org/wiki/Hierarchical_Data_Format

HDF支持多種不同的數據模型,包括多維數組,光柵圖像和表格。

它也像文件系統一樣分層,但數據存儲在一個魔術二進製文件中。

HDF5是一個可以管理極其龐大而復雜的數據集的套件。

想像一下PB級的JPA遙感數據。


BTree文件通常比關係數據庫快得多。 SQLite在其中包含一個處於公有領域的BTree庫(如真正的“公共領域”,而不是鬆散地使用術語)。

坦率地說,如果我想要一個多用戶系統,我需要大量的說服,不要使用體面的服務器關係數據庫。


Matt Sheppard的回答很好(mod up),但是在考慮主軸時我會考慮這些因素:

  1. 結構:它顯然分裂成碎片,還是你做出權衡?
  2. 用法:數據將如何分析/檢索/維護?
  3. 生命期:數據有多長時間有用?
  4. 大小:有多少數據?

CSV文件相對於RDBMS的一個特殊優勢是它們可以很容易地凝結並移動到任何其他機器上。 我們進行大量數據傳輸,並且一切都很簡單,我們只需使用一個大的CSV文件,並使用rsync等工具輕鬆編寫腳本。 為了減少大CSV文件的重複,可以使用YAML之類的東西。 我不確定我會存儲任何類似JSON或XML的內容,除非您有重要的關係要求。

就未提及的替代方案而言,不要打折Hadoop ,它是MapReduce的開源實現。 如果您需要分析一些結構鬆散的數據,並且您希望處於一個只需添加10台機器來處理數據處理的場景,那麼這應該很好。

例如,我開始嘗試分析大約20台機器上記錄的基本上所有不同功能的定時數的性能。 在試圖將所有內容都粘貼到RDBMS中後,我意識到一旦我將它聚合後,我不需要再次查詢數據。 而且,它只對我的匯總格式有用。 所以,我保留日誌文件,進行壓縮,然後將匯總的數據保留在數據庫中。

注意我更習慣於用“大”的尺寸來思考。


CAP定理簡潔地解釋它。 SQL主要提供“強一致性:所有客戶端即使在更新時也能看到相同的視圖”。


全文數據庫,可以與接近運營商查詢,如“10字以內”等。

關係數據庫是一個理想的商業工具,可用於許多目的 - 即使不是由能夠“充分利用功能”的天才設計和優化,也足夠快,足夠簡單地理解和設計。

但是一些商業目的需要全文索引,這些關係引擎要么沒有提供,要么作為事後的追求。 特別是法律和醫療領域有大量非結構化文本可以存儲和瀏覽。


另外:*嵌入式場景 - 通常需要使用小於一個完整的RDBMS的東西。 db4o是一種在這種情況下可以輕鬆使用的ODB。 *快速或概念驗證開發 - 您希望專注於業務,而不用擔心持久層


在某些情況下(例如金融市場數據和流程控制),您可能需要使用實時數據庫而不是RDBMS。 看維基鏈接


天兒真好,

我能想到的一種情況是,您正在建模的數據不能在關係數據庫中輕鬆表示。

一旦這樣的例子是移動電話運營商用於監視和控制移動電話網絡基站的數據庫。

幾乎所有這些情況下都使用OO DB ,無論是商業產品還是自卷系統,都可以使用物體。

我曾為一家大型公司的3G監控應用程序工作過,該公司將保持無名,但其徽標是紅葡萄酒色斑( - :),並且他們使用這樣的OO DB來跟踪所有各個單元格屬性網絡。

詢問這些數據庫是使用專有技術完成的,這些技術通常完全不含SQL。

HTH。

乾杯,


如果應用程序數據本質上是面向關鍵/值和分層的,那麼可能需要考慮使用LDAP服務器來代替傳統的SQL數據庫。


存儲數據的方式有很多,即使是“關係數據庫”,也包含一系列代碼,它們來自一個簡單的代碼庫,通過單個用戶操作本地文件(或文件),就好像它是一個關係數據庫,通過基於文件的系統,而不是可以處理多個用戶的慷慨選擇的嚴重“基於服務器”的系統。

我們使用XML文件很多 - 您可以得到良好的結構化數據,用於查詢的相當好的工具,可以進行編輯的功能(如果適用),這些功能是人類可讀的,然後您不必擔心數據庫引擎的工作情況(或數據庫引擎)。 這適用於基本上只讀的內容(在我們的案例中,通常不是從其他地方的數據庫生成的),也適用於您可以根據需要加載數據並將其保存的單用戶系統 - 但您正在創建機會如果你想要多用戶編輯 - 至少是單個文件的問題。

對我們來說就是這樣 - 我們要么使用一些可以執行SQL的東西(MS提供了一組工具,這些工具從.DLL運行到完成單個用戶的工作,直到企業服務器,並且他們都說同一個SQL (在較低端有限制)),或者我們將使用XML作為格式,因為(對我們而言)冗長性很少是一個問題。

我們目前不需要在我們的應用程序中操作二進制數據,這樣就不會出現問題。

墨菲


幾年前有一個名為JADE的RAD工具,它有一個內置的OODBMS。 數據庫引擎的早期版本也支持Digitalk Smalltalk。 如果您想使用非RDBMS範例對應用程序構建進行示例,這可能是一個開始。

其他OODBMS產品包括ObjectivityGemStone (您將需要獲得VisualWorks Smalltalk運行Smalltalk版本,但也有一個Java版本)。 在這個領域也有一些開源的研究項目--EXODUS及其後代SHORE浮現在腦海。

令人遺憾的是,這個概念似乎死了,可能是由於缺乏清晰可見的標準,相對於基於SQL的RDMBS系統的臨時查詢能力相對較差。

OODBMS最適合具有核心數據結構的應用程序,這些應用程序最好以互連節點的圖形表示。 我曾經說過,典型的OODBMS應用程序是一個多用戶地下城(MUD),其中房間將包含玩家的化身和其他物體。


我強烈推薦Lua作為SQLite類型數據存儲的替代品。

因為:

  • 該語言被設計為數據描述語言
  • 語法是人類可讀的(XML 不是
  • 可以將Lua塊編譯為二進製文件,以提高性能

這是接受答案的“母語收集”選項。 如果您使用C / C ++作為應用程序級別,則為了讀取配置/數據或將它們寫出來,放入Lua引擎(100kB二進製文件)是完全合理的。


文件系統中的純文本文件

  • 創建和編輯非常簡單
  • 用戶可以使用簡單的工具(例如文本編輯器,grep等)輕鬆操作
  • 二進製文件的高效存儲

磁盤上的XML或JSON文件

  • 如上所述,但有更多的能力來驗證結構。

電子表格/ CSV文件

  • 商業用戶很容易理解的模型

Subversion(或類似的基於磁盤的版本控制系統)

  • 對數據版本的很好的支持

伯克利DB (基本上,基於磁盤的哈希表)

  • 概念上非常簡單(只是未鍵入的鍵/值)
  • 蠻快
  • 沒有管理開銷
  • 支持我相信的交易

亞馬遜的簡單數據庫

  • 就像伯克利DB我相信,但託管

Google的App Engine數據存儲

  • 託管和高度可擴展性
  • 按文檔鍵值存儲(即靈活的數據模型)

CouchDB

  • 文檔重點
  • 簡單存儲半結構化/基於文檔的數據

母語集合(存儲在內存中或在磁盤上序列化)

  • 非常緊密的語言整合

自定義(手寫)存儲引擎

  • 在所需用例中可能具有非常高的性能

我不能聲稱對它們有太多了解,但是你也可能想看看對像數據庫系統


文件系統的優勢在於存儲二進制數據,這在關係數據庫中從來不會很好地工作。







nosql