首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析小文件性能

解析小文件性能
EN

Stack Overflow用户
提问于 2014-08-13 13:29:39
回答 1查看 39关注 0票数 2

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

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

显然,对于大型文件来说,第二种方式更好,但是对于小文件来说,使用指数化的搜索算法要快得多,但是在每一次关键行程上调用整个大巴机器可能不是最好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-13 13:40:18

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

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

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

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

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

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

代码语言:javascript
复制
var oneLetterIndex = {};
oneLetterIndex['a'] = [items starting with a...]
oneLetterIndex['b'] = [items starting with b...]
...
// do the above dynamically of course..

然后评估,如果需要更多的性能,对两个字母做同样的。

代码语言:javascript
复制
var twoLetterIndex = {};
twoLetterIndex['aa'] = [...];
twoLetterIndex['ab'] = [...];
...
twoLetterIndex['zz'] = [...];
// again, do dynamically and skip the two letter combos that don't exist in data
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25287568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档