2016-02-29 41 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