我听说在 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()