-
数据如何更新
Apache Cassandra™(DDAC)数据库的DataStax分发将每个新行都视为upsert:如果新行的主键与现有行的主键相同,则数据库会将其作为对现有行的更新进行处理。
在写入过程中,Cassandra会将每个新行添加到数据库中,而无需检查是否存在重复记录。此策略使数据库中可能存在同一行的许多版本。
定期将存储在内存中的行流式传输到磁盘中,称为SSTables结构。在某些时间间隔,数据库会将较小的SSTable 压缩为较大的SSTable。如果在此过程中数据库遇到同一行的两个或多个版本,则它只会将最新版本写入新的SSTable中。压缩之后,数据库将删除原始的SSTable,删除过时的行。
大多数Cassandra安装都将每行的副本存储在两个或更多节点上。每个节点独立执行压缩。这意味着已从一个节点删除了行的过时版本,它们可能仍存在于另一节点上。
这就是为什么数据库在读取过程中执行另一轮比较的原因。当客户端使用特定的主键请求数据时,Cassandra从一个或多个副本中检索该行的许多版本。具有最新时间戳的版本是唯一返回给客户端的版本(“ last-write-wins”)。
注意:某些数据库操作可能只写一行的部分更新,因此某行的某些版本可能包括一些列,但不是全部。在压缩或写入期间,数据库将使用每列的最新版本,从部分更新中汇编出每行的完整版本。
原文地址:https://www.cnblogs.com/yuxiaohao/p/12161351.html
时间: 2024-10-12 19:07:39