【发布时间】:2017-10-14 06:25:47
【问题描述】:
我有一个如下所示的 JSON 文件
{
"ID": "4",
"samples": [
{
"value": 2000,
"timeStamp": "1"
},
{
"value": 2000,
"timeStamp": "2"
},
{
"value": 2000,
"timeStamp": "3"
},
{
"value": 2000,
"timeStamp": "4"
},
{
"value": 2000,
"timeStamp": "5"
},
{
"value": 2000,
"timeStamp": "6"
},
{
"value": 2000,
"timeStamp": "7"
},
{
"value": 2000,
"timeStamp": "8"
},
{
"value": 2000,
"timeStamp": "9"
},
{
"value": 2000,
"timeStamp": "10"
},
{
"value": 2000,
"timeStamp": "11"
},
{
"value": 2000,
"timeStamp": "12"
},
{
"value": 2000,
"timeStamp": "13"
},
{
"value": 2000,
"timeStamp": "14"
},
{
"value": 2000,
"timeStamp": "15"
},
{
"value": 2000,
"timeStamp": "16"
},
{
"value": 2000,
"timeStamp": "17"
}
]
}
这个示例数组可能非常庞大。我需要为任何给定的timestamp 找到value。由于 JSON 文件可能很大,我无法将所有文件内容加载到主内存中并使用 rapidjson 或其他 JSON C++ 库对其进行解析。
我尝试使用mmap 函数打开它并获取指向文件开头的指针。但问题是如何到达特定的timestamp 并获得value。 Timestamp 总是按排序顺序出现。对巨大的字符数组进行线性搜索并不省时。可能是二进制搜索可以工作,但我不知道如何应用这些数据。
任何其他技术,如缓存文件偏移量或其他东西也可以提供帮助。
JSON 文件格式为文本。
【问题讨论】:
-
我知道这可能有点晚了,但这里的好处之一是时间戳按排序顺序出现。作为开始的一个步骤,利用它将文件分成多个较小的部分。然后继续你的二分搜索想法。您可能可以将文件放入内存并使其非常快。