我们正在使用 Cassandra 进行日志收集。每小时大约 150,000 - 250,000 条新记录。我们的列族有几个列,如“host”、“errorlevel”、“message”等,以及特殊的索引列“indexTimestamp”。此列包含四舍五入到小时的时间。
因此,当我们想要获取一些记录时,我们使用 get_indexed_slices() 和第一个 IndexExpression by indexTimestamp(使用 EQ 运算符),然后是其他一些 IndexExpressions - by host、errorlevel 等。
仅通过 indexTimestamp 获取记录时,一切正常。但是,当通过 indexTimestamp 获取记录时,例如,主机 - cassandra 工作时间很长(超过 15-20 秒)并抛出超时异常。
据我了解,在通过索引列和非索引列获取记录时,Cassandra 首先通过索引列获取所有记录,然后通过非索引列过滤它们。
那么,为什么 Cassandra 这么慢呢?通过 indexTimestamp,记录不超过 250,000 条。难道不能在 10 秒内过滤它们吗?
我们的 Cassandra 集群在一台具有 4 个 CPU 和 4 GB 内存的机器(Windows 7)上运行。