【发布时间】:2012-12-31 21:23:56
【问题描述】:
我听说在 cassandra 中使用多行选择很糟糕,因为对于每个行选择它都会运行新查询,因此例如,如果我想一次获取 1000 行,它与一次运行 1000 个单独的查询相同,是真的吗?
如果说我在一分钟内有 1000 次页面浏览量,每次加载页面时继续选择大约 50 行会有多糟糕,它会严重减慢 cassandra 的速度吗?
P.S 我在我的项目中使用PHPCassa
【问题讨论】:
我听说在 cassandra 中使用多行选择很糟糕,因为对于每个行选择它都会运行新查询,因此例如,如果我想一次获取 1000 行,它与一次运行 1000 个单独的查询相同,是真的吗?
如果说我在一分钟内有 1000 次页面浏览量,每次加载页面时继续选择大约 50 行会有多糟糕,它会严重减慢 cassandra 的速度吗?
P.S 我在我的项目中使用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()
【讨论】: