我应该在领域使用@Index吗?

Tap*_*ani 6 android realm

我有最大值 我的数据库中有600000个Realm对象.我通过id(int)=,uuid =和time(int)<=进行查询,结果按时间排序.我是否应该对某些字段使用@Index注释,并可能将ID从Integer更改为String?查询是否会变慢,因为我无法索引时间字段并且不能有多字段索引?Sqlite能更好地满足我的需求吗?

另外,如果我一次将大量对象存储到数据库中,我应该为所有对象使用一个事务还是为每个对象创建一个新事务?大型事务占用多少内存,并且在为每个对象创建新事务时是否存在性能损失?

数据库将位于Android设备的外部存储(存储卡)中.

Epi*_*rce 5

您绝对应该@Index在任何查询中使用的任何字段上使用。

它极大地提高了性能/查询速度。


Chr*_*ior 4

来自这里王国的克里斯蒂安。关于@Index,我们很快也会为整数添加它。如果您担心速度,我可能会对不同的选项进行基准测试,看看哪种方法更适合您,因为在一般情况下回答这些问题相当困难。

对于事务,在一个事务内尽可能多地进行批处理通常会更快,因为创建和提交事务会产生相关开销,但事务内的所有内容都必须适合内存。因此,根据数据集的大小,可能必须将其分解为较小的批次。再次进行小型概念验证可能是了解哪种方法最适合您的具体情况的最佳方法。

  • 取决于你所说的读入记忆是什么意思?Realm 是一个具有零拷贝架构的内存映射数据库。当您执行查询时,我们创建一个指向真实数据的轻量级数据结构(称为行访问器),这就是排序的内容,而不是数据本身。这一切都发生在 C++ 中。没有数据被复制到Java,它只是在实际读取时从c++中获取,例如。这就是为什么我们的系列如此轻巧。 (2认同)