背景
我们最近开始了一个“大数据”项目,我们想要跟踪用户对我们的产品做了什么--他们登录的频率,他们点击的功能等等--你的基本用户分析信息。我们仍然不知道我们到底会问些什么问题,但大多数问题都是“X在过去的Y月里多久发生一次?”类型的东西,所以我们开始更快地存储数据,而不是晚些时候,我们认为我们可以在需要的时候总是迁移,重新形状等等,但是如果我们不存储它,它就永远消失了。
我们现在正在研究我们可以问什么样的问题。在一个典型的RDBMS中,这一阶段将包括对许多不同维度的数据进行切片和切割,导出到Excel中,生成图表,寻找趋势等等--对Cassandra来说,这似乎是相当困难的。
目前,我们正在使用Apache,并提交Spark作业来对数据进行切片和处理。这实际上很好,我们正在获取我们需要的数据,但它相当麻烦,因为似乎没有任何本机的API,我们可以连接到我们的工作站,所以我们被困在使用火花提交脚本和一个星火应用程序包装一些SQL从命令行,并输出到一个文件,然后我们必须阅读。
问题
在一个表(或列家族)中,在3个节点上运行RF 2的~30列,向每个非PK列添加一个索引会有多糟糕,这样我们就可以使用CQL跨任何列查询它了?会不会对写作的表现产生可怕的影响?磁盘空间的使用会有大幅度的增加吗?
我一直在研究的另一个选项是使用触发器,因此对于插入的每一行,我们都填充了另几个表(基本上是自定义的辅助索引表)--这是一种更可接受的方法吗?有人对触发器的性能影响有任何经验吗?
发布于 2015-12-07 22:54:11
添加更多索引的影响:--这实际上取决于您的数据结构、分布以及访问它的方式;就在您将此过程与RDMS进行比较之前。对于Cassandra,最好先定义查询,然后构建数据模型。
这些家伙对二级索引的性能影响做了很好的准备:https://pantheon.io/blog/cassandra-scale-problem-secondary-indexes。
主要的影响(来自post)是,辅助索引是每个节点的本地索引,因此要通过索引值满足查询,每个节点必须查询自己的记录来构建最终的结果集(而不是主键查询,因为它确切地知道需要查询哪个节点)。因此,这不仅会影响到写作,还会影响阅读性能。
在计算数据模型的性能方面,我建议使用cassandra压力工具;您可以将它与Datastax构建的数据建模器工具结合起来,以快速生成概要文件:http://www.datastax.com/dev/blog/data-modeler。
例如,我在默认表上运行基本的压力配置文件,然后在默认表中使用辅助索引,而"with indexes“批次写入的完成时间要长40%多一点。GC业务/持续时间等也有所增加。
https://stackoverflow.com/questions/34139651
复制相似问题