NoSQL:什麼是非結構化數據?
我們目前正在使用基於 mssql 伺服器的解決方案在資源邊緣執行。
我們現在有許多傳統的選擇來解決負載的下一步行動:
- 購買更快的 CPU 和 IO
- 將一些客戶拆分為單獨的伺服器
- 將數據庫移動到集群
就許可和硬體或時間而言,所有這些都是昂貴的。因此,我想通過將整個系統移動到 nosql 引擎 cassandra 承諾的可擴展解決方案來添加另一個選項。
然而,我不確定也沒有使用 noSQL 數據庫的經驗,所以我需要了解“非結構化”數據的結構。
在我們的應用程序中,我們基本上將使用者以各種方式輸入的數據儲存為“鍵值”列表。有一個包含頭元素(如 Order)的父表,還有一個包含包含訂單內容的鍵值對的子表(如 Order_Lines)。
在業務方面,Order 和 OrderLines 是一個單元。但是由於RDBMS,它們儲存在表中並且必須一直連接。
在操作過程中,我們有時會選擇只載入最上面的部分,但大多數時候,我們會載入頭部行+一些KVP來展示一些有用的資訊。
例如,在概覽列表中,我們在每行的列中顯示頭部標識符 + 一些值。
更新:我們儲存任何形式的表格。所以,基本上我們儲存“文件”。然而,我們必須通過任何值、排序等來準備和搜尋這些表格。數據訪問控制在數據庫上增加了另一層複雜性。
正如您可能猜到的那樣,某些 KVP 的數量和可用性因對象而異。為每種對象創建單個表是不可能的,因為我們必須為不同的數據組合創建數千個表。
這種類似“字典”的數據集會更好地儲存在 noSQL 數據庫中嗎?我們會從中獲得性能優勢嗎?cassandra 會將這些 head+KVP 建模為一個數據集嗎?查看 cassandra 網頁和一些教程,我的印像是,我們的 RDBMS 和 cassandra 在數據組織方面並沒有太大區別 - 如果您想選擇 5 個 KVP,我們會留下相同數量的連接為每一行列出一個列表。
歡迎啟發,也可以指出解釋問題的論文。
有幾個概念需要區分。一個是關於結構的,另一個是關於模式的。
結構化數據是應用程序預先知道它接收到的每個字節的含義的數據。一個很好的例子是來自感測器的測量。相比之下,Twitter 流是非結構化的。模式是關於有多少結構被傳達給 DBMS,以及它如何被要求強制執行。它控制 DBMS 解析它儲存的數據的程度。需要架構的 DBMS(例如 SQL Server)可以儲存未解析的數據(varbinary)或可選解析的數據(xml)和完全解析的數據(列)。
NoSQL DBMS 位於從無解析(鍵值儲存)向上的範圍內。Cassandra 在這方面提供了相當豐富的功能。它們與關係儲存的顯著不同之處在於數據的一致性。一旦定義了一個表,只有與該定義匹配的數據可以保存在那裡。然而,在 Cassandra 中,即使定義了列和族,也不要求同一個表中的任何兩行看起來彼此相似。由應用程序設計人員來決定單行(也稱為文件)中有多少內容以及由指針連結的單獨保存的內容。實際上,您想要多少非規範化。
優點是您可以通過一次順序讀取來檢索完整的數據集。這很快。一個缺點是,作為應用程序的程序員,您現在要永遠對所有數據完整性和向後兼容性問題負責,永遠對觸及該數據儲存的每一位程式碼負責。這可能很難做到正確。此外,您被鎖定在數據的一種觀點上。如果您按訂單號鍵入行,您如何報告特定產品、地區或客戶的銷售情況?