在气动加载器中使用多个字段作为关键

时间:2015-09-27 16:57:14

标签: aerospike aerospike-loader

我想上传一个psv文件,其中包含每天存储的医生,位置和练习的关键统计信息。

此条目的唯一键包括:
医师姓名,
练习名称,
位置名称和
服务日期。

四个领域都在一起。

Aerospike加载程序的

Configuration file example仅显示带有单个密钥的版本,我没有看到多个条目的语法。

有人可以告诉我,如果可以这样做(使用已加载文件中的列配置列出多个关键字段),并向我展示示例。

3 个答案:

答案 0 :(得分:3)

将密钥加入一个字符串。为了便于阅读,请使用":"之类的分隔符。

知道aerospike不存储原始密钥可能会有用,它会存储摘要(哈希)。

答案 1 :(得分:0)

关于"最佳方式"没有简单的答案。这取决于你想要以速度和规模查询的内容。您的数据模型将反映您希望如何读取数据以及延迟和吞吐量。

如果您想要特定数据的高速(1-5ms延迟)和高吞吐量(每秒100k),您需要在将数据写入Aerospike时聚合数据并使用复合键存储它将允许您快速获取数据,例如医生天位置。

如果您想要在一段时间内进行统计分析,并且查询可能需要几秒钟到几分钟,那么您可以将数据存储在结构较少的格式中并在其上运行Aerospike聚合,甚至使用Hadoop或直接在Aerospike数据上点火。

答案 2 :(得分: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,Long创建了键,则可以通过first4bytes.toIntnext4.toInt以及Last8.toLong提取。