我想要上傳一個psv文件,記錄每天存儲的醫生,位置和練習的關鍵統計數據。使用多個字段作爲鑰匙在aerospike裝載機
此條將包括一個獨特的密鑰:
醫生的名字,
實踐名字,
位置名稱,
服務的日期。
四個領域在一起。
Configuration file example Aerospike裝載機顯示只有單鍵的版本,我沒有看到多個條目的語法。
有人可以告訴我,如果這是可能做到的(有配置列出多個關鍵字段使用來自加載文件的列),並告訴我的例子。
我想要上傳一個psv文件,記錄每天存儲的醫生,位置和練習的關鍵統計數據。使用多個字段作爲鑰匙在aerospike裝載機
此條將包括一個獨特的密鑰:
醫生的名字,
實踐名字,
位置名稱,
服務的日期。
四個領域在一起。
Configuration file example Aerospike裝載機顯示只有單鍵的版本,我沒有看到多個條目的語法。
有人可以告訴我,如果這是可能做到的(有配置列出多個關鍵字段使用來自加載文件的列),並告訴我的例子。
將鍵加入到一個字符串中。爲了便於閱讀,請使用分隔符「:」。
知道aerospike不存儲原始密鑰可能很有用,它會存儲摘要(散列)。
對於「最佳方式」沒有簡單的答案,它取決於您想要以速度和比例進行查詢。您的數據模型將反映您想要如何讀取數據以及延遲和吞吐量。
如果您想要某條特定數據的高速(1-5ms延遲)和高吞吐量(每秒100k),您需要在將數據寫入Aerospike並使用組合鍵存儲數據時彙總數據這將允許您快速獲取數據,例如醫生一天地點。
如果你需要一段時間的統計分析,並且查詢可能需要幾秒到幾分鐘時間,那麼你可以存儲數據結構不那麼格式,並運行Aerospike聚合,或者甚至使用Hadoop或Spark直接在Aerospike數據上。
您可以創建一個字節緩衝區並將字段轉換爲字節,然後將它們添加到字節緩衝區。但是在閱讀時,您需要知道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.toInt
和Last8.toLong
。
對,如果您願意,您可以選擇花費存儲空間來容納原始鍵。摘要的好處是不管輸入的大小,密鑰總是20個字節。 –
製作一個字符串需要比箱子更多的空間。如果您使用'sendkey = true'存儲密鑰。 – Hammad