【问题标题】:How to search effectively and fastly when we have 50,000 of JSON Data?当我们有 50,000 个 JSON 数据时,如何有效快速地搜索?
【发布时间】:2014-06-24 18:22:17
【问题描述】:

我有一个json数据如下

var data=[
{
Name: "AAA",
Phone : "1"
},
{
Name: "BBB",
Phone : "2"
},
|
|
|
|
|,
{
Name: "Z50000",
Phone : "50000"
}
]

我正在搜索包含特定关键字(姓名/电话)的记录。我为此使用了javascript。我尝试了以下方式

var searchKeyword=document.getElementById("txtSearchKeyword").value;
var searchData=new Array();

for(var i=0;i<data.length;i++){
if(data.Name.index(searchKeyword) !=-1 || data.Phone.index(searchKeyword) !=-1){
searchData.push(data[i]);
}
}

一切正常,但需要花费大量时间。当我们拥有大量数据时,如何高效快速地搜索?

【问题讨论】:

  • 您是否考虑过将其转换为 JSON 字符串并使用正则表达式?
  • @Hayes,可能值得一试,但似乎不太可能更快,当然也不会更容易;在找到对象后,必须以某种方式从字符串中提取对象。
  • 我无法相信正则表达式在 (a) 巨大的字符串和 (b) 获取数据所需的回溯上会更快。
  • 是的,我只是在吐槽那个,但结果可以通过组收集到一个较小的集合中。
  • 无论如何,此类问题的唯一真正解决方案涉及构建索引,但如果该过程本身当然会很耗时。理想情况下,它会提前在服务器上完成;事实上,在这种情况下,将表保存在真正的 RDBMS 中并通过 AJAX 进行搜索可能最终会更快。尤其是移动设备在完成所有这些工作时会非常缓慢。

标签: javascript jquery json search


【解决方案1】:

除了 Hayes 提到的使用正则表达式之外,如果您的数据已排序(看起来),您可以使用二进制搜索。这应该在 O(log n) 时间内运行,但如果我错了,请有人纠正我。

例如:

while not found 
    compare middle of data array with what you are searching
        if they match, return
        if what you are searching is > midpoint, call recursively on middle of last half
        else recursively call on middle of first half of array

编辑:原来我误读了这个问题。我将保留代码示例,以防有人在谷歌搜索中找到它并想​​要搜索 jsons 数组

【讨论】:

  • 不完全是,因为他正在寻找包含这个词的条目。
  • 啊,那我看错了。它必须是 O(n),因为他必须检查每个案例以查看它是否包含字符串。我以为他会在大集合中寻找单个对象。该算法可以根据他正在搜索的内容/排序方式进行修改,这可能会更有效。
猜你喜欢
  • 2020-09-30
  • 1970-01-01
  • 2021-05-03
  • 2019-10-04
  • 2017-09-21
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多