2015-09-27 50 views
2

我想要上傳一個psv文件,記錄每天存儲的醫生,位置和練習的關鍵統計數據。使用多個字段作爲鑰匙在aerospike裝載機

此條將包括一個獨特的密鑰:
醫生的名字,
實踐名字,
位置名稱,
服務的日期。

四個領域在一起。

Configuration file example Aerospike裝載機顯示只有單鍵的版本,我沒有看到多個條目的語法。

有人可以告訴我,如果這是可能做到的(有配置列出多個關鍵字段使用來自加載文件的列),並告訴我的例子。

回答

3

將鍵加入到一個字符串中。爲了便於閱讀,請使用分隔符「:」。

知道aerospike不存儲原始密鑰可能很有用,它會存儲摘要(散列)。

+3

對,如果您願意,您可以選擇花費存儲空間來容納原始鍵。摘要的好處是不管輸入的大小,密鑰總是20個字節。 –

+0

製作一個字符串需要比箱子更多的空間。如果您使用'sendkey = true'存儲密鑰。 – Hammad

0

對於「最佳方式」沒有簡單的答案,它取決於您想要以速度和比例進行查詢。您的數據模型將反映您想要如何讀取數據以及延遲和吞吐量。

如果您想要某條特定數據的高速(1-5ms延遲)和高吞吐量(每秒100k),您需要在將數據寫入Aerospike並使用組合鍵存儲數據時彙總數據這將允許您快速獲取數據,例如醫生一天地點。

如果你需要一段時間的統計分析,並且查詢可能需要幾秒到幾分鐘時間,那麼你可以存儲數據結構不那麼格式,並運行Aerospike聚合,或者甚至使用Hadoop或Spark直接在Aerospike數據上。

0

您可以創建一個字節緩衝區並將字段轉換爲字節,然後將它們添加到字節緩衝區。但是在閱讀時,您需要知道dataType或鍵的格式,才能從字節緩衝區中提取它們。

var keyVal = new ArrayBuffer[Byte] 
    for (j<- 0 until keyIndex.length) 
    { 
     val field = schema(keyIndex(j)) 
     field.dataType match { 
     case value: StringType => { 
      keyVal = keyVal.+=(row(keyIndex(j)).asInstanceOf[String].toByte) 
     } 
     case value: IntegerType => { 
      keyVal = keyVal.+=(row(keyIndex(j)).asInstanceOf[Integer].toByte) 
     } 
     case value: LongType => { 
      keyVal = keyVal.+=(row(keyIndex(j)).asInstanceOf[Long].toByte) 
     } 
     } 
    } 
    val key: Key = new Key(namespace, set,keyVal.toArray) 

KeyIndexes = array containing the index of key fileds

Schema = schema of the fileds.

row = a single record to be written.

當提取的值,如果你知道密鑰的模式就像你做的INT,INT的關鍵,只要你能由first4bytes.toInt提取和next4.toIntLast8.toLong