2015-09-27 49 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