我正在尝试使用Cassandra替换我拥有的大型数据集(2.5Tb / 50亿行)的mysql,我无法在单个服务器中扩展更多数据集。
我每小时插入/更新几百万行。目前,我在cassandra中逐个插入和查询,因为我不知道哪个分区有数据,并且对它们进行分组似乎更慢。但是一个接一个,即使有3个cassandra节点,我也无法匹配单个mysql服务器的速度。
在mysql中,我可以批处理,因为我知道它存储在同一台服务器中。是否可以使用主键的值来确定客户端的分区,因此我可以使用BATCH或SELECT..IN更有效地对查询进行分组?
我的意思是,给定一组PK,如1,2,3,4,5,6 ......和N个服务器,我想知道说,第1行,第3行是在同一个分区中,所以我可以在我的查询中进行分组。用cassandra可以吗?
答案 0 :(得分:1)
如果您在分区键上使用WHERE
执行查询,那么大多数时间驱动程序会将最有效的数据路由到具有此数据的副本(仅当您没有更改{{3}时) - 默认情况下,所有驱动程序都使用所谓的TokenAware
策略),计算给定分区键的标记,并为其找到副本。
如果您需要获取多个条目,则通过异步API& amp;并行运行N个查询。在客户端合并结果比使用IN
执行查询更有效。
P.S。在Cassandra BATCH
中,语义与关系数据库略有不同。请检查load balancing policy以了解推荐的模式。