我已经看到了这个警告,但无法找到关于此主题的任何详细解释。为什么在Cassandra中有大的分区这么糟糕?
3
A
回答
6
对于单一分区起动
细胞的最大数量(行×列)是 2十亿。
如果你允许分区增长无界,你最终会达到这个限制。
在这个理论极限之外,与大型分区对JVM和读取时间的影响相关联存在实际限制。这些实际限制从版本到版本不断增加。这种实际的限制并不是固定的,而是随着数据模型,查询模式,堆大小和配置的变化而变化,这使得很难直接回答太大的问题。
从2.1和早期的3.0版本开始,读取和压缩的主要成本来自对每个column_index_size_in_kb
标记一行的索引进行反序列化。您可以增加key_cache_size_in_mb
进行读取操作,以防止不必要的反序列化,但会减少堆空间并填充旧版本。您可以增加列索引大小,但会增加读取时最差的IO成本。 Theres还为CMS和G1设置了许多不同的设置,以便在阅读这些大分区时调整对象分配的巨大峰值的影响。在改善这一点方面正在积极努力,因此未来它可能不再是瓶颈。
维修工作也仅限于(在最好的情况下)分区级别。因此,如果说你不断地追加到一个分区,并且在两个节点上的该分区的散列不是在一个确切的时间进行比较(分布式系统本质上保证这一点),则必须对整个分区进行流式传输以确保一致性。增量修复可以减少这种影响,但是仍然会大量传输大量的数据和波动的磁盘,因此需要不必要地将它们压缩在一起。
您可以继续添加到具有问题的角落案例和场景中。很多时候,大型分区可能需要才能读取,但其中涉及的调整和转角情况并不是真的值得,而只是设计数据模型以便与Cassandra预期的方式更友好。我会建议瞄准100MB,但你可以远远超出这个舒适。进入千兆位,你需要开始考虑调整它(取决于数据模型,用例等)。
相关问题
- 1. 在Android中,为什么在onDraw()中分配对象很糟糕?
- 2. 保留周期:为什么这么糟糕?
- 3. 为什么连续运行PHP脚本这么糟糕?
- 4. 为什么val + = someOtherValue如此糟糕?
- 5. 为什么GLUT如此糟糕?
- 6. 为什么.classname比element.classname糟糕
- 7. 为什么这是一个糟糕的散列函数?
- 8. 为什么初始化这样的二维数组更糟糕?
- 9. 为什么这个window.innerheight的表现如此糟糕?
- 10. 为什么这个Java控制台动画如此糟糕?
- 11. 大师们说LD_LIBRARY_PATH很糟糕 - 有什么选择?
- 12. 什么是WPF最糟糕的问题?
- 13. 为什么Cassandra会更改分区键?
- 14. 为什么在这个例子中CTE的性能比临时表更糟糕
- 15. 为什么在SOA设计中CRUD操作如此糟糕?
- 16. 什么可能导致neo4j的这种糟糕的表现?
- 17. Codeigniter中的助手类 - 他们真的很糟糕,为什么?
- 18. 为什么D中的这个并行代码缩放非常糟糕?
- 19. cassandra速度。为什么这么慢?
- 20. 为什么暂停/中止线程很糟糕?
- 21. 为什么UIButton在iOS 7上渲染titleLabel如此糟糕?
- 22. 这有多糟糕?在30秒内
- 23. 为什么我的基于spf13的vim看起来很糟糕
- 24. 为什么重写Plone的main_template.pt是一个糟糕的主意?
- 25. 为什么Firefox在调整图像大小方面如此糟糕?
- 26. 为什么我的jQuery过渡很糟糕?
- 27. 为什么我的谷歌搜索排名如此糟糕?
- 28. 为什么我生成的Javadocs看起来很糟糕?
- 29. 为什么我的Direct2D绘图表现如此糟糕?
- 30. 为什么我的tanh激活函数表现如此糟糕?
哇,真棒的答案!我正在主演这部电影,所以我可以将它转发给这里的一些开发者。 – Aaron
@ChrisLohfink感谢您的详细回复!我是卡桑德拉新手,你能否证实我对你的回应的理解?主要原因是:1)在高速缓存层中拥有较大的分区效率不高。 2)大型分区在节点之间复制数据效率低下。这听起来是对的吗? – Glide
这是一个很好的缩写版本是的。我会补充说JVM在大对象上本质上是不好的。 –