簡體   English   中英

在Aerospike加載程序中使用多個字段作為鍵

[英]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.toIntnext4.toIntLast8.toLong

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM