2016-02-29 62 views
3

``(我读过A Big Data Modeling Methodology for Apache Cassandra为我的项目数据库,它使用Cassandra的数据建模。所以,我用查询驱动的方法最佳索引模型

我将有一个搜索客户如下:(这只是一个例子,真正的页面有多个搜索参数此外,没有一个搜索参数的所需的参数。)

Sample Search Customers

在我卡桑德拉密钥空间中的样本客户表:

//---------Create Customers Table
USE testKeySpace;
CREATE TABLE IF NOT EXISTS customers(
id varint
name text
birthday date,
gender text,
education text,(主密钥是根据所提到的文章中选择)
PRIMARY KEY ((id,name,gender,education),birthday)
);

的问题是:

  • 什么最好索引为此表模型?
  • 如何编写查询以支持可选搜索参数
+1

如果卡桑德拉实际上是一个非常适合这个任务,那么你就应该有N个表,每个查询的类型。 Cassandra 3.0支持更容易支持的物化视图。 –

+1

卡桑德拉不是您最适合您的要求。您将不得不使用Solr或elasticsearch在cassandra上进行索引。 –

+0

因此,根据我的几个搜索选项,不建议每个查询使用单独的表;我会'n!'查询!真的吗? – Elnaz

回答

2

搜索结束了!

对于这种动态查询的,你就可以很快使用新SASI,将在卡桑德拉3.4发行次级指数(定于2016年3月)。

此索引将允许全文搜索带有标记器以及数值范围查询。本地二级索引实现方式更高效。

阅读并惊叹:https://github.com/apache/cassandra/blob/trunk/doc/SASI.md

+0

太好了!不幸的是,我们必须使用Cassandra 2.1.5,但是,因为我们在使用更新版本的SSIS连接到Cassandra时遇到了问题。 – Elnaz

+1

如果您需要使用Cassandra 2.1.5,DSE Search是一种可行的解决方案,正如bechbd在 – doanduyhai

3

那么根据你在这里说,我认为有可能是您当前表设计的几个问题,当谈到索引和搜索能力。在你的文章中,你提到没有任何搜索参数是必需的,但是对于你现在使用的表格模式,你需要在每个请求的WHERE条款中提供编号,名称,性别和教育。这是由于CQL要求您没有WHERE子句,或者WHERE子句必须包含其中的所有PARTITION KEY字段。由于您提前未定义好(即动态)的查询,因此您不会希望按照每个查询路径进行查询,因为您不知道查询可能是什么。

在这种情况下,我建议您创建一个基于分区数据最有效方式的PRIMARY KEY表。然后,我会建议您使用Undefined_variable中的建议,并在数据之上设置Solr或Elasticsearch以提供您正在查找的动态和全文搜索功能。如果您决定采用Solr路由,您将希望使用Datastax(社区(免费)或企业(付费)),因为它与开箱即用的Solr(称为DSE搜索)有很好的集成。通过DSE Search,您可以使用CQL查询您的Solr索引,如SELECT * FROM customers WHERE solr_query='name: XXXX'。你可以看看这里看到更多的信息:

http://docs.datastax.com/en/latest-dse/datastax_enterprise/srch/srchCql.html

+0

以下提到的那样,您是对的;我只是根据上述文章数据建模步骤设计了表格。它说:“**平等**搜索属性...映射到表的前缀列**主键**”。和“An ** inequality **搜索属性...映射到表**集群键**列”。但问题恰恰是主键的要求。所以,根据你的回答,似乎我必须在Cassandra之上使用索引工具。 TNX。 – Elnaz