2016-01-13 50 views
1

我正在使用Cassandra以非常簡單的方式存儲瀏覽量。但是,由於我設置錯誤的索引,我無法執行我想要的查詢。如何更改Cassandra索引以允許查詢

CREATE TABLE my_site.pageviews (
    url text, 
    createdat timestamp, 
    userid text, 
    PRIMARY KEY ((url, createdat, userid)) 
) 

我發現了我無法查詢的困難方式,除非我在查詢中指定了主鍵的所有部分。

如何做我需要配置我的PRIMARY KEY,允許這些查詢?:

SELECT * FROM pageviews WHERE url = ? AND createdat > ? 

SELECT * FROM pageviews WHERE userid = ? AND createdat > ? 

任何指導,將不勝感激!

回答

1

的各類查詢,你將需要使用兩個表如下所示:

CREATE TABLE my_site.pageviews_by_url (
    url text, 
    createdat timestamp, 
    userid text, 
    PRIMARY KEY ((url), createdat, userid) 
) 

CREATE TABLE my_site.pageviews_by_userid (
    url text, 
    createdat timestamp, 
    userid text, 
    PRIMARY KEY ((userid),createdat,url) 
) 

如果你會注意到的細微差別。表「pageviews_by_url」只有'url'作爲分區鍵,其他列作爲集羣鍵。表「pageviews_by_userid」大部分是相同的表,但'userid'作爲分區鍵。選擇查詢,使用第一集羣列上分區鍵的=,然後>,將讓你你正在尋找的時候,你做以下查詢的結果:

SELECT * FROM pageviews WHERE url = ? AND createdat > ? 

SELECT * FROM pageviews WHERE userid = ? AND createdat > ? 

將數據插入這些表,使用BATCH語句是一個很好的例子。同時插入兩個表。

+0

感謝您的解釋。我能夠創建兩個表並複製數據。我現在可以運行這兩個查詢,並讓它再次運行一段時間。非常感謝! – Ropstah