【问题标题】:How much data is too much for an array?多少数据对于数组来说太多了?
【发布时间】:2011-01-25 19:22:38
【问题描述】:

我有一个 flex webapp,可以从数据库中检索一些姓名和地址。项目工作正常,但我想让它更快。我可以将所有名称预加载到数组中并在用户发出请求时过滤数组,而不是为每个名称请求调用数据库。在我走这条路之前,虽然我想检查在一个数组中拥有一个包含 50,000 或 100 万个元素的应用程序是否可行?它减慢应用程序的速度限制是多少? (我预计我的应用程序中还有很多事情要做,但为了这个缘故,我们假设应用程序只包含这个巨大的数组)。

【问题讨论】:

    标签: apache-flex actionscript


    【解决方案1】:

    在大型数组中搜索可能会比需要的速度慢,尤其是在您谈论 100 万条记录时。

    你能把它分成几个仍然很大但更小的数组吗?如果您总是按帐号搜索,请根据第一位或两位数进行划分。

    不过,要直接回答您的问题,50,000 个元素数组的纯 AS3 处理应该没问题。一旦你得到超过 250,000,我认为你需要打破它。

    但显示这么多 UI 元素是不同的。如果您尝试将图表绑定到具有 10,000 个元素的 dataProvider,那就太多了。列表或数据网格也是如此。

    但对于纯模型数据,不受 ui 限制,根据我的经验,我建议最多 250,000 个。

    【讨论】:

      【解决方案2】:

      如果您加载大量数据(但不确定您是否使用列表),您可以查看 James Wards 关于使用 AsyncListViewpaging 来获取数据的帖子根据需要分块。很快就会尝试实施这样的事情。他的可运行示例使用 100,000 行,分页为 100(与 HttpService/AMF 类型调用一起使用): http://www.jamesward.com/2010/10/11/data-paging-in-flex-4/

      【讨论】:

        【解决方案3】:

        是的,如果您愿意,您可能可以在一个数组中填充几百万个项目,而 Flash 播放器不会对您大喊大叫。但是你真的想要吗?

        如果应用程序必须在本地下载整个数据库才能运行,它是否需要更长的时间才能启动?如果下载这么多数据所需的额外时间并不重要,那么一些数据库查找真的值得优化吗?

        如果您有一个很好的用例来执行此操作,则必须注意使用这些数据结构的方式。循环遍历数组以查找项目会有点慢,因此您需要在本地创建索引,很可能通过使用一些哈希结构。您允许搜索查询越灵活,索引问题就越有趣。

        【讨论】:

        • “所以你要在本地创建索引”...你是什么意思?
        • 我的意思是创建使用相关索引作为键并指向数组区域的对象结构。例如,假设您的数组已正确排序,您可能有一个具有一个字母键的对象,每个键都指向大数组中的第一个索引,该索引具有以该字母开头的特定字段。通过使用该对象并从与给定字母关联的位置开始循环遍历大数组,您将有一种有效的方法来快速查找具有以该字母开头的字段的所有记录。您可以想象索引使用全名作为键等
        • 听起来很有趣..我在哪里可以找到示例?
        • 我只是把它放在一起 jsfiddle.net/Z2nwR/1 。打开浏览器控制台以查看生成索引的结构。例如,要快速遍历名字以“J”开头的记录,您将遍历 fname1_index["J"] 中的数组
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        • 2012-03-14
        相关资源
        最近更新 更多