我想上传一个 psv 文件,其中包含每天存储的医生、位置和实践的关键统计数据。
该条目的唯一键将包括:
医师姓名、
诊所名称、
地点名称和
服务日期。
四个字段一起。
Aerospike 加载程序的配置文件示例仅显示具有单个键的版本,并且我没有看到多个条目的语法。
有人可以建议我是否可以这样做(使用加载文件中的列列出多个关键字段的配置),并告诉我这个例子。
我想上传一个 psv 文件,其中包含每天存储的医生、位置和实践的关键统计数据。
该条目的唯一键将包括:
医师姓名、
诊所名称、
地点名称和
服务日期。
四个字段一起。
Aerospike 加载程序的配置文件示例仅显示具有单个键的版本,并且我没有看到多个条目的语法。
有人可以建议我是否可以这样做(使用加载文件中的列列出多个关键字段的配置),并告诉我这个例子。
将键连接成一个字符串。为了便于阅读,请使用分隔符,如“:”。
知道 aerospike 不存储原始密钥,它存储摘要(散列)可能很有用。
您可以创建一个字节缓冲区并将字段转换为字节,然后将它们添加到字节缓冲区。但是在阅读时,您需要知道键的数据类型或格式才能从字节缓冲区中提取它们。
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
andnext4.toInt
和 and提取Last8.toLong
。
关于“最佳方式”没有简单的答案,它取决于您想要以速度和规模查询的内容。您的数据模型将反映您希望如何读取数据以及延迟和吞吐量。
如果您想要特定数据的高速(1-5ms 延迟)和高吞吐量(每秒 100k),则需要在将数据写入 Aerospike 时聚合数据并使用复合键存储它,这将允许您快速获取该数据,例如医生日位置。
如果你想在一段时间内进行统计分析,而查询可能需要几秒钟到几分钟的时间,那么你可以将数据存储在结构较少的格式中并在其上运行 Aerospike 聚合,甚至直接使用 Hadoop 或 Spark在 Aerospike 数据上。