我听说在 cassandra 中使用多行选择很糟糕,因为对于每个行选择,它都会运行新查询,所以例如,如果我想一次获取 1000 行,它与一次运行 1000 个单独的查询相同,是吗真的?
如果说我在一分钟内有 1000 次页面浏览量,那么每次加载页面时继续选择大约 50 行会有多糟糕,它会严重减慢 cassandra 的速度吗?
PS我PHPCassa用于我的项目
是的,运行 1000 行查询与运行 1000 行查询相同(如果您使用推荐的RandomPartitioner)。但是,我不会对此过分担心。在 Cassandra 中,通过键查询一行是一种非常常见、非常快速的操作。
至于你的第二个问题,很难提前说清楚。构建它并测试它。请注意,Cassandra 确实在内存缓存中使用,因此如果您查询相同的行,那么它们将缓存。
我们为 Cassandra 使用 Playorm,那里有一个“findAll”模式,它支持快速获取所有行。访问 https://github.com/deanhiller/playorm/wiki/Support-for-retrieving-many-entities-in-parallel了解更多详情。
1)我稍微调试了 Cassandra 代码库,根据我的观察,同时查询多行,cassandra 提供了 multiget() 功能,该功能也在 phpcassa 中继承。
2) Multiget 被优化以处理批处理请求,它节省了你的网络跳数。(比如 1k 行会有 1k 往返,所以它肯定减少了 999 往返的时间)
3) 关于 phpcassa 中的 multiget() 的更多信息:php cassa multiget()