【问题标题】:Slow when querying cassandra with apache spark in Java.在 Java 中使用 apache spark 查询 cassandra 时速度很慢。
【发布时间】:2017-05-30 19:13:26
【问题描述】:

我还是 No SQL 解决方案的新手,几个月前我才开始学习 nosql。

我有一个项目,它是由 Spring Boot 框架构建的,并且有一个 DAO 层。我的数据库是 cassandra,我正在使用 datastax java cassandra 驱动程序进行通信。我发现 cassandra 或者所有 nosql 键/值解决方案都不支持区分大小写和使用“like%”用例进行查询。在通过 stackoverflow 和其他论坛进行了一些研究之后,发现那些必须使用 apache spark、elastic search 或 apache lucene 等工具来挖掘 cassandra 中的数据。所以我选择了apache spark,我不确定代码是否应该以这种方式完成(就最佳实践而言)。

这是我查询数据的代码:

@Override
    public Login getLoginByEmail(String shopId, String email) throws InterruptedException, ExecutionException {

        JavaFutureAction<List<Login>> loginRDDFuture = javaFunctions(getSparkContext())
                .cassandraTable("shop_abc", "app_login", loginRowReader)
                .filter(new Function<Login, Boolean>() {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public Boolean call(Login login) throws Exception {
                        return login.getEmail().equalsIgnoreCase(email.trim());
                    }
                }).collectAsync();

        List<Login> lgnList = loginRDDFuture.get();

        if(lgnList.size() > 0){
            return lgnList.get(0);
        }

        return null;
    }

我花了 9 秒才得到结果和数据库,只有一张表和 3 条记录。我会认为如果数据库超过百万条记录会发生什么。

我不确定这是否是好的做法,或者它有更好的方法或更好的工具来做到这一点,我希望有人能给我指导。

欣赏。

【问题讨论】:

    标签: java apache-spark cassandra


    【解决方案1】:

    我认为这种查询会相当慢,因为它必须从 C* 数据库中检索所有数据,按令牌范围分解查询并将它们映射到 RDD,然后使用 spark 作业过滤它们。即使您的数据集很小,这也会产生一些开销,尽管 9 秒确实看起来很长,但如果不了解您的环境,很难知道为什么。

    或者,您是否考虑过使用SSTable Attached Secondary Indices (SASI)? SASI 是在 C* 3.4 中引入的,允许您使用 cassandra 进行 LIKE % 查询,无论是否区分大小写,即:

    CREATE CUSTOM INDEX fn_suffix_allcase ON cyclist_name (firstname) 
    USING 'org.apache.cassandra.index.sasi.SASIIndex'
    WITH OPTIONS = { 
      'mode': 'CONTAINS',
      'analyzer_class':'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer',
      'case_sensitive': 'false'
    };
    

    关于 SASI 的一个很好的参考演讲是SASI: Cassandra on the Full Text Search Ride

    【讨论】:

    • 几分钟前刚研究过SASI。看起来我的问题可以通过这个建议来解决。我将实现它,因为它是 cassandra 的一部分,我不需要注入这么多第三方库。我已经通过谷歌搜索并几乎阅读了每一个最重要的建议,但没有人介绍这个。谢谢@Andy Tolbert
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多