javascript - 解析小文件性能

标签 javascript sql parsing

假设我有一个包含 30.000 行的字典文件(自然字符串排序),存储在某个 json 文件中。我希望用户输入一些字符,然后相对于字典动态自动完成他的输入。做到这一点的最佳策略是什么:

  • 将这个json文件分成小的json文件 block ,然后根据第一个字符指定调用的url,使ajax调用命中一个大约 1000 行的文件(无论如何,这个解决方案看起来很糟糕并且不可维护)
  • 将此文件放入某个sql表中,对其进行索引并通过ajax调用它

显然,对于大文件,第二种方法更好,但对于小文件,当然搜索算法通过索引会快得多,但在每次击键时调用整个 daba 机制可能不是最好的方法。

最佳答案

这里有几个问题。数据的存储方式和服务方式之间不需要有任何关联。通常两者之间的数据没有相关性。

我同意 Pointy 的观点,您应该做的第一件事就是提供一个非常简单的解决方案,即提供整个文件并仅在客户端对其进行操作。评估所提供的文件的大小和性能。这足以满足您的需求吗?如果是这样,请不要进行不必要的优化。

注意:测试性能时,请确保您拥有具有实际方差和数据范围的生产规模数据集。

如果这还不够好,您需要确定瓶颈是什么。是客户端的查找吗?是数据传输吗?数据是在加载时传输还是在第一次需要时传输?如果第一次需要的话提前转移是否合理?这能解决问题吗?

如果问题确实是将大量数据从服务器传输到客户端,则编写一个智能服务器端处理程序,将数据以 block 的形式存储在内存中,通常按第一个字母或前两个字母,并根据需要提供这些 block 。确保每个 block 都可以单独缓存(适当的缓存 header )。

如果问题不在于传输,而在于客户端处理(这很可能),请查看如何将数据存储在 JSON 文件中。创建索引可能会有好处,当您第一次加载数据时,循环遍历它并创建以每个第一个字母开头的所有项目的新列表,然后创建以两个字母组合开头的所有项目,然后当您访问您需要的内容时,您可以使用这些列表,如下所示:

var oneLetterIndex = {};
oneLetterIndex['a'] = [items starting with a...]
oneLetterIndex['b'] = [items starting with b...]
...
// do the above dynamically of course..

然后评估,如果需要更多性能,请对两个字母执行相同的操作..

var twoLetterIndex = {};
twoLetterIndex['aa'] = [...];
twoLetterIndex['ab'] = [...];
...
twoLetterIndex['zz'] = [...];
// again, do dynamically and skip the two letter combos that don't exist in data

关于javascript - 解析小文件性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25287568/

相关文章:

javascript - 在 Express 路由中使用 redis

Javascript 到 "export"所有 cookies?

javascript - 通过 API 动态更改数据表列宽

java - 有没有办法在 SonarQube 中测量 Java 代码的各种指标

javascript - 无法通过数据通道获取消息

Java:在mysql中插入重音字符

mysql - 如何查找与全部或部分输入完全匹配的字符串

mysql - SQL 查询 - 如何在同一行中有半拆分列

ruby - 你如何将一段文字解析成句子? (最好用 Ruby)

android - org.json.jsonarray 无法转换为 jsonobject 错误