【问题标题】:Cassandra and Tombstones: Creating a Row , Deleting the Row, Recreating the Row = Performance?Cassandra 和 Tombstones:创建行、删除行、重新创建行 = 性能?
【发布时间】:2011-11-09 18:34:30
【问题描述】:

有人可以解释一下,以下过程对墓碑有什么影响:

1.)使用键“1”创建“行”(“字段”:用户、密码、日期)

2.)使用键“1”删除“行”

3.)使用键“1”创建“行”(“字段”:用户、密码、登录次数)

序列在一个线程中按顺序执行(因此这会以相对较高的“速度”发生 = 动作之间没有长时间的停顿)。

我的问题:

1.) 这对墓碑的创建有什么影响。在2.) 之后创建/存在一个墓碑。但是,如果在同一键下再次创建新的(稍微更改的行)(在处理步骤3.))下,现有的墓碑会发生什么。 cassandra 可以非常有效地“复活”墓碑吗?)

2.) 与仅非常有针对性地删除date“字段”然后创建“logincount”字段相比,上述过程要差多少? (它很可能会更高效。但相反,与简单地删除整行并使用正确的数据从头开始重新创建相比,找出哪些字段已被删除要复杂得多......)

备注/更新:

我真正想做的是,将"date" 字段设置为null。但这在 cassandra 中不起作用。值不允许空值。因此,如果我想将其设置为 null,我必须将其删除。但我担心这个显式的第二个删除请求会对性能产生负面影响(与仅将其设置为 null 相比)......并且如上所述,我必须首先找出哪些字段被 nulliefied 并且最重要的是有一个值(我必须比较此状态的所有属性...)

非常感谢! 马库斯

【问题讨论】:

    标签: performance cassandra tombstone


    【解决方案1】:

    我想在这里澄清一些迟到的事情。

    首先,关于西奥多的回答:

    1) 为简单起见,所有行在内部都有一个 tombstone 字段,因此当新行与 tombstone 合并时,它只是变成“带有新数据的行,它还记得它曾在时间 X 被删除过”。所以在这方面没有真正的惩罚。

    2) 说“如果您创建和删除列值的速度足够快以至于中间不会发生刷新......墓碑[被]简单地丢弃”是不正确的;为了正确起见,墓碑始终存在。也许西奥多的想法是相反的:如果你删除,然后插入一个新的列值,那么新的列会替换墓碑(就像它会替换任何过时的值一样)。这与行的情况不同,因为列是存储的“原子”。

    3) 给定 (2),如果随着时间的推移要删除许多列,则 delete-row-and-insert-new-one 可能会更高效。但对于单列,差异可以忽略不计。

    最后,关于 Tyler 的回答,在我看来,简单地删除有问题的列比将其值更改为空 [byte] 字符串更为惯用。

    【讨论】:

    • 对不起,我不是很清楚 - 我的意思是创建 + 删除 + 创建一个列值,就像在原始问题中一样。
    【解决方案2】:

    1)。如果您删除整个,则墓碑仍然保留,并且不会被步骤 3 中的后续插入重新激活。这是因为很久以前可能已经插入了该行(例如步骤0:键“1”,字段“名称”)。行“1”键“name”需要保持删除状态,而行“1”键“user”被重新激活。

    2)。如果您创建和删除 column 值的速度足够快,以至于中间不会发生刷新,则不会影响性能。该列将在 Memtable 中就地更新,而墓碑则被简单地丢弃。只有一个值最终会被持久写入 SSTable。

    但是,如果 Memtable 在第 2 步和第 3 步之间刷新到磁盘,则墓碑将被写入生成的 SSTable。随后的刷新会将新值写入下一个 SSTable。这将使后续读取速度变慢,因为现在需要从 SSTable 中读取列并进行协调。 (类似地,如果在步骤 1 和 2 之间发生刷新。)

    【讨论】:

      【解决方案3】:

      只需将“日期”列设置为保存一个空字符串。这就是通常用来代替 null 的内容。

      如果要删除列,只需显式删除列,而不是删除整行。这样的性能效果类似于为列值写一个空字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 2019-05-16
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        相关资源
        最近更新 更多