【发布时间】: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