我在cassandra有这张桌子:
创建表地址(adress_id uuid,adress_name文本,key1文字,key2文字,key3文字,key4文字,effective_date时间戳,价值文本,活动布尔值,首要的关键 (…
正如Alex Ott上面提到的,你应该花更多时间在数据模型上,以避免首先出现大分区的可能性,通过不同地组织数据,或者通过人为地将分区拆分成更多部分(例如,时间序列数据经常分裂)例如,每天将数据放入一个单独的分区中。
从技术上讲,可以确定分区的现有大小,但它永远不会有效。要了解原因,您需要回忆一下Cassandra如何存储数据。单个分区的内容并不总是存储在同一个sstable(磁盘上文件)中 - 同一个分区的数据可能分布在多个文件中。一个文件可能有几行,另一个文件可能有几行,第三个文件可能删除或修改一些旧行,依此类推。为了计算分区的长度,Cassandra需要读取所有这些数据,将它们合并在一起,并测量结果的大小。卡桑德拉 的 不 强> 通常在写入时执行此操作 - 它只是将新更新写入内存(最终是新的sstable),而不首先读取旧数据。这就是使Cassandra中的写入速度如此之快的原因 - 您在每次写入之前读取整个分区的想法将大大减慢它们的速度。
最后,虽然Cassandra没有很好地处理大分区,但如果开发人员想要解决这个问题,就没有固有的原因。 Cassandra克隆Scylla的开发人员担心这个问题,并正在努力改进它,但即使在Scylla中,巨大分区的处理还不完善。但最终会是。几乎 - 对于单个磁盘的大小,单个分区(根据定义,存储在单个节点上)的大小总是有限制的。如果您的数据模型确实被破坏并且您可以在单个分区中最终获得TB级,则此限制也可能成为严重问题。