Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 卡桑德拉数据库-获取大量数据_Performance_Cassandra - Fatal编程技术网

Performance 卡桑德拉数据库-获取大量数据

Performance 卡桑德拉数据库-获取大量数据,performance,cassandra,Performance,Cassandra,有一个cassandra 2.x数据库,其中我必须使用非主键列从一个表中选择一些数据,该列是另一个使用简单where子句的表的主列。 数据在缓存中使用。 问题是检索过程太慢,并且使用datastax 3.x驱动程序获取timedout。 有没有办法在不升级数据库软件或改变现有数据库结构的情况下获取数据。 我尝试使用datastax api进行异步抓取和分页,但它仍然无法处理数据量,查询失败。Cassandra针对通过主键(完整、部分或至少分区键)访问数据进行了大量优化。其他访问模式需要额外的工作

有一个cassandra 2.x数据库,其中我必须使用非主键列从一个表中选择一些数据,该列是另一个使用简单where子句的表的主列。 数据在缓存中使用。 问题是检索过程太慢,并且使用datastax 3.x驱动程序获取timedout。 有没有办法在不升级数据库软件或改变现有数据库结构的情况下获取数据。
我尝试使用datastax api进行异步抓取和分页,但它仍然无法处理数据量,查询失败。

Cassandra针对通过主键(完整、部分或至少分区键)访问数据进行了大量优化。其他访问模式需要额外的工作。理论上,您可以在相应的列上使用二级索引,但仅当您在至少具有分区键的情况下搜索数据时才建议使用二级索引-如果您仅使用该列,它仍将到达所有节点并获取所有数据,因此速度会慢得多。您需要记住其他限制,例如,列的基数等(您可以阅读)


通过编程,您也可以对数据进行完整扫描,但它不应该是简单的
select*from table
,因为它会使协调节点过载,导致超时等。相反,它应该是更复杂的解决方案-最好通过从各个令牌范围读取数据来执行扫描,将查询发送到保持相应范围的节点,并且可以并行执行-这就是工作方式和方式(我认为您可以尝试为此任务采用DSBulk代码片段-可以将其用作库)。我还介绍了如何使用Java驱动程序-您可以采用此代码,并用过滤条件替换简单的计数。

嗨,Alex Ott,谢谢您宝贵的建议。我花了一些时间回到问题上来,测试你的解决方案。基于令牌的完整表扫描适用于非索引筛选器,而不适用于其他库。我对datastax驱动程序还有一个问题-这次是一个简单的直接查询,在in子句中使用索引列-从xxxTable中选择*其中xxxColumn in(x1,x2,x3,…)子句中的值不是固定的,并且随算法检查而变化。但是,与之前的neflix驱动程序(我正在将其移植到datastax)相比,性能差异是巨大的——使用netflix astyanax驱动程序需要25毫秒的典型查询使用datastax几乎需要180毫秒,即速度慢了八倍。任何建议响应时间可以提高到与驱动程序的astyanax相匹配?建议-不要在分区键列上使用中的,因为这将为读取数据引入额外的跃点-而是并行发出多个请求,使用
executeAsync
然后在应用程序中收集数据…也尝试使用executeAsync。它仅在5-10ms左右略微改善了总体响应时间。但是,在astyanax驱动程序的响应时间附近仍然没有。您是否使用准备好的查询?若并没有,那个么它将并没有帮助,因为驱动程序不知道如何路由查询