[英]Is it possible to use primary key along with secondary key in Aerospike for fetching a record?
[英]Use multiple fields as key in aerospike loader
我想上傳一個psv文件,其中包含每天存儲的醫師,位置和做法的關鍵統計數據記錄。
該條目的唯一鍵包括:
醫師姓名,
練習名稱,
位置名稱,以及
服務日期。
四個領域在一起。
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,Long中創建鍵一樣,可以按first4bytes.toInt
和next4.toInt
和Last8.toLong
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.