我该怎么做才能保持正在使用数据库的移动应用程序的性能?

问题描述 投票:1回答:2

我正在使用数据库构建应用程序。我有一个words表,每次用户键入内容时,此应用程序都会记录和更新数据库中的单词。

并且用户输入一个匹配的单词后,frequency字段将自动增加。

但是麻烦是用户类型每天都在增加,我担心搜索性能会随着时间的流逝而降低,而且Int字段有一天会达到限制(max limit Int)。

因此,我将数据库限制为少于50.000条记录。一段时间后,我删除了较少使用的记录。

但是我不知道如何处理每个单词的frequency Int字段?如何准确地知道每个单词的频率用法而不会永远增加该字段?

ios sql performance search scale
2个回答
0
投票
例如,如果您有一个单词MAN的频率为15,则存储在数据库中的值为log(15)〜= 1.17609125906。

如果随后发现4个新出现的MAN,则要将4个添加到该字段中。您无法直接添加日志值,因为log(x)+ log(y)= log(x * y)。 (See the Logarithm Rules section of this article for more information on log rules。)

相反,假设您使用以10为底的对数,则可以使用以下公式:设置频率= log(10 ^ frequency + 4)


0
投票
所以可能要占用两个或三个字节,但是节省的费用可以忽略不计。

无论如何,有以下几种防止溢出的方法:


您可以检测到它,然后撤消操作,将所有内容按比例缩小两倍,然后重做。

    您可以定期检查所有数字并在接近极限时进行缩放。
  • 您可以进行如下所示的概率更新。
  • 概率更新
  • 不是简单地每次都将频率增加一,而是仅以随着计数器增长而越来越低的概率来进行。例如,您可以以1.0 / (oldValue + 1)2 ** -oldValue的概率进行增量。后者导致对数增长,但与其他答案中的想法不同,它是有效的。

    由于随机性和精度损失,显然存在一些缺点,但是当您只关心相对频率时,它应该足够好。

  • © www.soinside.com 2019 - 2024. All rights reserved.