【问题标题】:SQLite vs MemorySQLite 与内存
【发布时间】:2011-08-31 22:49:12
【问题描述】:

我的应用有问题。

假设我有 6 个用户,每个用户最多可以有 9 个得分条目(即晚上 8:00 得分 1000 分,收集金 3,银 4 等),例如每个阶段的分数和 9 个阶段。

所有这些分数都是从 API 调用中获取的,因此它可以以 3 分钟以上的间隔更新。

  • 我需要对此数据执行的操作是
    • 从第 4 阶段查找最近的最小、最大记录。
    • 以及更多操作,例如加减两个分数等

这6个用户,他们的分数记录已经在数据库中,API调用后需要更新。

现在我的问题是:

对于此类数据(此处的分数数据)将所有 6 个用户的所有数据保存在 NSArray 或 NSDictionary 中的内存中,并通过 min-max 算法找到该数组中的最小值和最大值,这是一种更好的方法吗.

应该通过“WHERE score=200”之类的查询从数据库中获取,简而言之,2 个数据库查询分别返回最接近的最小和最大记录,而不是保留所有数据在内存中。

我们关注的是速度和内存使用。关键是,数据库调用是否可以快速有效地找到最小值和最大值,或者在数据库中所有记录的数组中搜索最小值、最大值。 所有记录可以是 6 个用户 * 每个 9 分 = 54。 记录的更新时间可以是 3 分钟以上。 找到某些值的最小值最大值的频率很高。

如果需要更多详细信息,请询问。 提前致谢。

【问题讨论】:

    标签: iphone sqlite memory performance


    【解决方案1】:

    您使用的数据量如此之少,我认为这不值得担心。采用使您的开发过程最简单的方法!

    编辑:

    如果我有大量数据(数百个竞争对手),我会使用 SQLite。您可以进行如下查询:

    SELECT MIN(`score`) FROM `T_SCORE` WHERE `stage` = '4';
    

    这样您就可以让数据库为您处理计算,因此您无需获取所有结果。

    我的 SQL-fu 不是最棒的,但我认为你也可以这样做:

    SELECT `stage`, MIN(`score`) AS min, MAX(`score`) AS max FROM `T_SCORE` GROUP BY `stage`
    

    这将在一个查询中完成所有计算。

    【讨论】:

    • 感谢阿莫里亚!假设我有合理数量的数据,那么你会选择什么,数据库或将这些数据保存在 NSArras/NSDictionaries 中?
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2012-12-11
    • 2011-05-05
    • 1970-01-01
    • 2012-01-04
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多