Cassandra 数据如何更新

数据如何更新

Apache Cassandra™(DDAC)数据库DataStax分发将每个新行都视为upsert:如果新行的主键与现有行的主键相同,则数据库会将其作为对现有行的更新进行处理。

写入过程中Cassandra会将每个新行添加到数据库中,而无需检查是否存在重复记录。此策略使数据库中可能存在同一行的许多版本。

定期将存储在内存中的行流式传输到磁盘中,称为SSTables结构。在某些时间间隔,数据库会将较小的SSTable 压缩为较大的SSTable。如果在此过程中数据库遇到同一行的两个或多个版本,则它只会将最新版本写入新的SSTable中。压缩之后,数据库将删除原始的SSTable,删除过时的行。

大多数Cassandra安装都将每行的副本存储在两个或更多节点上。每个节点独立执行压缩。这意味着已从一个节点删除了行的过时版本,它们可能仍存在于另一节点上。

这就是为什么数据库在读取过程中执行另一轮比较的原因当客户端使用特定的主键请求数据时,Cassandra从一个或多个副本中检索该行的许多版本。具有最新时间戳的版本是唯一返回给客户端的版本(“ last-write-wins”)。

注意:某些数据库操作可能只写一行的部分更新,因此某行的某些版本可能包括一些列,但不是全部。在压缩或写入期间,数据库将使用每列的最新版本,从部分更新中汇编出每行的完整版本。