Relational-Theory
寬列數據庫如何在儲存佈局上實現動態列?
眾所周知,在關係數據庫中,添加新列時,必須重新分配數據(https://stackoverflow.com/questions/463677/alter-table-without-locking-the-table)以在磁碟上保持單行連續.
我想了解這是如何在 Cassandra 等寬列儲存上實現的,這些儲存是稀疏的並且可以處理大量動態列插入(http://www.datastax.com/dev/blog/thrift-to-cql3(動態列族))
謝謝!
儘管 Cassandra 允許在“表”中定義“列”,但這些定義遠沒有關係數據庫模式那麼嚴格。正如這裡所說
同一列族中的不同行不必共享同一組列,並且可以隨時將一列添加到一行或多行。
在這個世界中,新值僅在重寫該行時添加到該行。軟體知道它在哪裡寫入了行並維護任何前向指針,以便能夠按需返回完整的行。它可以選擇刪除舊版本,釋放磁碟空間以供重用,並將新行寫入連續儲存中的其他位置。沒有暗示在一個地方進行架構更改會自動傳播到其他類似的行。
對於鍵值儲存,要求更加寬鬆。什麼構成“列”完全取決於應用程序。儲存引擎看到的只是一團位,它會寫入磁碟和索引。它在磁碟上如何或在何處保存這些位對於應用程序來說既不存在也不存在。
並非所有關係數據庫都要求所有行的所有部分都是連續的。Oracle 允許單行跨越多個頁面。SQL Server 具有用於長文本列的頁外指針,並且 Filestream 允許儲存在 DBMS 之外的作業系統文件系統中。