我知道 Apache Cassandra 中的每一列都附加了一个时间戳,并且通过查看时间戳或比较值来确定地解决单个列的读取冲突。
假设我将一列添加到动态列集中。我将此列写入单个节点。然后我将另一列添加到同一个列存储,但这次添加到另一个节点。Apache Cassandra 如何合并这两者?合并后两列都会存在吗?
我知道 Apache Cassandra 中的每一列都附加了一个时间戳,并且通过查看时间戳或比较值来确定地解决单个列的读取冲突。
假设我将一列添加到动态列集中。我将此列写入单个节点。然后我将另一列添加到同一个列存储,但这次添加到另一个节点。Apache Cassandra 如何合并这两者?合并后两列都会存在吗?
最好不要将 cassandra 数据库视为不同节点上的一组数据库,而是将其视为一个数据库。将列添加到第一个节点会将其添加到所有其他节点。你的数据实际被写入的次数是由你的复制策略和复制因子决定的,但是数据的每个副本都是一样的。
因此,如果您将新列告诉第一个节点,第二个节点将自动理解它并能够访问该数据。如果您告诉第二个节点同一列中的不同数据,它会覆盖旧数据或添加新数据,具体取决于您正在写入的行中是否已经有数据。
如果您要向第二个节点添加新列,则该列中的所有数据和第一列中的数据将同时存在,并且可以通过任一/任何节点进行查询。
如果您正在谈论将 2 个不同的列(具有不同的名称)添加到单个行/分区(列集?),那么将不会有合并 - 这些是不同的列。
如果您在同一行/分区中写入相同的列(具有相同的名称),那么最后一次写入(基于您提供的时间戳)将获胜。