我一直在與卡桑德拉和我已經打了一下一個絆腳石。對於我是多麼需要在數據搜索,我發現一個複合主鍵我需要什麼,而是在此列家庭記錄插入的時間去與它的狗的偉大工程,我不完全知道爲什麼。緩慢插入時間與複合主鍵在卡桑德拉
表定義:
CREATE TABLE exampletable (
clientid int,
filledday int,
filledtime bigint,
id uuid,
...etc...
PRIMARY KEY (clientid, filledday, filledtime, id)
);
的clientid =客戶端的內部ID。 filledday =自1/1/1900以來的天數。 filledtime =記錄被收回當天的滴答數。 id =一個Guid。
的日期和時間結構的存在是因爲我需要能夠白天方便,快捷地進行篩選。
我知道有複合主鍵完全不同卡桑德拉商店列族。從我的理解它會保存一切,離主鍵的主要成分的基行的新列。這是插入緩慢的原因嗎?當我說慢我的意思是,如果我只是在ID上的主鍵插入將需要約200毫秒,並與複合主鍵(或任何其子集,我只是clientid和ID試圖相同的效果),它會採取1000條記錄超過32秒。選擇時間快於複合鍵表,因爲我必須應用二級索引並使用'ALLOW FILTERING'以便用標準鍵表獲得正確的記錄(我知道我可以在代碼中執行此操作,但問題是我正在處理一些海量的數據集,並不總是實際或可能的)。
難道我宣佈柱族或主鍵錯了什麼,我想幹什麼?對於所有未列出的非主鍵列,該表的列寬爲37列,這是否會成爲問題?我很困惑這一點。我無法真正找到其他有類似問題的人。
對於查詢的一個例子,我需要能夠做的事情一樣得到以下幾點:1)獲取一個客戶記錄每天 2)獲取記錄的日期和時間的客戶端。 我正在使用填滿和填充時間主要是因爲我的代碼庫是.Net,並沒有建立在timeuuids的功能。我現在有一些東西,所以我給他們一個嘗試。我現在看到這個問題的方式是我需要找到一個關鍵結構,它可以讓我在不瞭解客戶和時間的情況下完成這些查詢,但仍然可以將數據分開以便不會使插入變慢。注意:數據集非常大。 – Bozarth
我建議使用我上面提出的結構,並使用[.NET客戶端,如fluentcassandra](https://github.com/fluentcassandra/fluentcassandra)來使用TimeUUID。 爲了避免熱點可以很容易地只添加一個隨機整數(從預定義的範圍等0-9),並形成像這樣的複合分區鍵: 'CREATE TABLE exampletable( 的clientid INT, 桶,整數 ID timeuuid , ... PRIMARY KEY((客戶端ID,桶),ID) );' 'SELECT * FROM exampletable其中的clientid = 123和剷鬥IN(0,1,2,3,4,5,6 ,7,8,9)和ts> minTimeuuid('2013-06-18 00:00:01')和ts
omnibear