【问题标题】:Is realm query order consistent?领域查询顺序是否一致?
【发布时间】:2020-02-19 15:29:06
【问题描述】:

在没有明确排序的情况下查询领域数据库时,我可以依赖结果中的给定顺序吗?是插入顺序吗?首要的关键?最近更新时间?示例如下:

var results = Realm.All<MyRecord>().Where(i => i.MyProp == "in the wild wild west");
foreach (var result in results)
{
  // do a thing with the record
}

我需要一个一致的顺序,但我不想通过“明确”的顺序来增加开销,因为这会增加搜索开销,只要领域的结果是一致的(假设数据库没有变化)我很高兴使用领域给出的默认顺序。

【问题讨论】:

  • 添加单个属性来保证排序是极少量的数据,与保证您想要的顺序相比,不会真正增加任何有影响的开销。
  • 虽然我在很大程度上同意你的观点,但我正在批量插入大约 4m 记录,这种数据量的开销确实会变得很明显,如果可以添加这个,那就太可惜了依靠,如果有必要,我真的很感激理解
  • 我不会依赖 Realm 的“自然排序”来做任何事情。更重要的是,如果曾经插入或修改过数据,那么排序就会消失。所以有两件事 List 属性可以保证保持它们的插入顺序。 所以你可以依靠它。部分问题还源于在没有设置顺序的情况下重新读取数据:出于性能原因,不保证保留结果插入顺序。这意味着当您读取结果时,除非您定义它,否则没有保证顺序。
  • 干杯让我明白了,不幸的是,我将选择显式排序,这可能意味着我正在使用的数据集大小的查询开销。谢谢

标签: database realm


【解决方案1】:

我不会依赖 Realm 的“自然排序”来做任何事情。更重要的是,如果曾经插入或修改过数据,那么排序就会消失。

两件事

保证列表属性保持其插入顺序。

这样您就可以放心了。部分问题还源于在没有设置顺序的情况下重新读取数据:

出于性能原因,不保证结果插入顺序 保存下来。

这意味着当您读取结果时,除非您定义它,否则没有保证顺序。

【讨论】:

  • 从技术上讲,如果您删除对象,订单就会开始分崩离析。
  • @EpicPandaForce 这有点不清楚。哪个排序? OP所指的“自然顺序”还是其他?我应该更新/澄清答案吗?如果是这样,您能否稍微扩展一下您的意思,以便我修改答案?
  • 插入顺序一直保留,直到您从 Realm 中删除一个对象,此时 Realm 中的最后一个项目(或某些项目,实际上)占据了它的位置,然后突然您没有插入顺序了。但默认顺序实际上只在删除时更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多