【问题标题】:Word database for iOS custom keyboardiOS 自定义键盘的 Word 数据库
【发布时间】:2021-10-09 20:04:10
【问题描述】:

我正在为一种亚洲语言编写自定义键盘,并且我有一个包含超过 50 万个单词的单词数据库。我现在使用 Realm 并用它来提供单词建议。当用户键入前几个字母时,键盘将搜索数据库并根据赋予每个单词的优先级值提供单词。但这与 App Store 中的其他键盘相比似乎效率低下,我在这个问题上找不到任何具体的方法或想法。任何人都可以为我指明方向,以提高使用自定义 iOS 键盘进行单词搜索的效率。

我没有尝试过 CoreData,但一般来说,Realm 被认为比 CoreData 快。

【问题讨论】:

  • 但这似乎效率低下 为什么?你有什么样的困难?问题也可能是效率低下或格式错误的代码,所以你能把它包括进去吗?例如有时我们会看到将领域对象转换为数组,这会降低它们的效率,但不知道你在做什么,这对我们来说纯粹是猜测。
  • @Jay Ok 主要问题就是这样。键盘并没有真正滞后,用户可以继续打字。但是建议栏似乎滞后,因为我需要一次又一次地读取数据库,并且它不会像 iOS 库存键盘或其他一些自定义键盘那样流畅地显示建议。实际上,我的键盘有 Unicode 和英文两种布局。对于英语,我使用带有 UITextChecker 的 iOS 内部字典,并且在同一个自定义 UI 建议栏上显示建议非常快。问题出在我自己的字典/数据库上。
  • 我目前只是用BEGINSWITH 做一个简单的查询,并在领域表上按priority 排序。最终结果将被转换为数组,然后返回到键盘上显示。
  • 最终结果将被转换为数组,这可能是问题所在,因为您可能会返回数百万个结果。我们有一个 2Gb 的数据库,我们正在从中提取数据,它的速度非常快,因为我们让 Realm 完成繁重的工作 - Realm 对象是延迟加载的,因此即使是大量存储的数据也会导致更小的内存占用 - 但是,将 Realm 对象保留在 Realm 集合中是关键。不过再一次 - 在不知道您的代码是什么/如何工作的情况下,我们只是在猜测。
  • 我认为你是对的,我删除了数组,看起来更好。我还将单词表分成多个较小的表(对于每个起始字母),现在更好了,我对最终结果感到满意。感谢您的帮助

标签: swift performance realm custom-keyboard word-completion


【解决方案1】:

首先,存储类型:也许考虑使用 plist 文件或 .text 文件也不错。 并且在 ASCII 模式下以排序方式保存单词会很棒。

第二:你需要一个算法来这么快地分解成一组单词。你可以通过保存 ASCII 码来做到这一点。

这是一个二分搜索算法的例子:

请搜索不同的算法。

【讨论】:

  • 与领域等索引数据库相比,我不建议使用 plist 或 .text 文件。这会慢很多——即使是对半或二分搜索。这不是一个糟糕的答案,但对于更大的数据集,这不是一个好的解决方案。
  • 我正在考虑将数据库表分成多个表,作为单词的第一个字母。从技术上讲,我不知道它有什么用,但我现在愿意尝试任何事情。
  • 我把我的桌子分成多个小桌子。还删除了一些不必要的铸件,现在看起来好多了。
  • @jay 是的,我同意你的看法,我认为 RJE 的字数有限,而且不会变得更大。
猜你喜欢
  • 1970-01-01
  • 2016-09-14
  • 2014-08-11
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 2012-09-12
  • 2015-06-09
  • 2018-01-02
相关资源
最近更新 更多