我正在研究如何将Realm DB用于我的新项目,我遇到了一些问题。当您使用Realm DB时,请分享您的经验。抱歉我的长问题列表。
首先,请参阅my sample code
狗班
router = routers.DefaultRouter(trailing_slash=True)
router.register(r'mymodels', views.MyModelViewSet)
和人类
Dog.h
@interface Dog : RLMObject
@property NSString *name;
@property NSInteger age;
@end
RLM_ARRAY_TYPE(Dog) // define RLMArray<Dog>
然后,我为人和狗创建数据(1000000条记录) - 1个人将拥有1只狗。在某些情况下我陷入困境
删除对象的表现似乎很慢 我试图删除的人有一个名字是“Ethan”,性能很慢,并在执行半名单时崩溃应用程序。我想我用不正确的方法来删除对象。
Person.h
@interface Person : RLMObject
@property NSString *name;
@property NSInteger age;
// to-many relationship
@property RLMArray<Dog *><Dog> *dogs;
@end
RLM_ARRAY_TYPE(Person) // define RLMArray<Person>
结果是&gt; 52000记录,名称为“Ethan”,app只删除其中一半(26000)
我不知道如何用Realm删除条件记录。我想我会为我的问题#2编写如下代码
RLMResults *people = [Person objectsWhere:@"name == 'Ethan'"];
// Get the default Realm
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
for (int i=0; i< people.count; i++) {
Person *aPerson = [people objectAtIndex:i];
[realm deleteObject:aPerson];
}
[realm commitWriteTransaction];
目前尚不清楚如何在创建DB后重命名,删除或添加新列(除了使用删除数据库并再次重新创建数据库的最简单方法之外)
用于浏览在桌面上创建的数据文件的工具(Realm浏览器)在查询数据方面没有太大的灵活性。它只允许浏览数据但不允许使用某种条件进行查询。如果我遗失了某些内容,请指导我使用此工具查询数据。
对于疑难解答,我可能是客户端应用程序中的现有数据库,我想在我的项目中导入它来解决客户端的错误。那么,我如何使用Realm DB呢?
为人员和狗表插入1000000条记录后,数据库大小为52.8 MB。但是在我调用删除所有数据后,DB大小增加到92.3 MB
[Person deleteWhereObject:@"name = 'Ethan'"];
然后,我再次插入数据,文件大小继续增加。我不知道我的步骤有什么问题。
希望尽快得到您的支持!
答案 0 :(得分:2)
RLMResults *people = [Person objectsWhere:@"ANY dogs.name == 'Rex'"];
将deleteObjects:
与检索到的RLMResults
一起使用,而不是自己删除每个对象。如果您枚举,我建议NSFastEnumeration
与for (… in …)
一起使用。请注意RLMResults
会自动更新,因此如果您进行并发更改,则可能会遇到意外情况。
请参阅我对问题2的回答。
更改您的架构,碰撞RLMRealmConfiguration
的schemaVersion并提供迁移阻止,如果您重命名属性或更改其类型。
这还不可能,但仍在制作中。这由issue #28 in the realm-browser-osx repo跟踪。
如果您希望能够写入文件,请将realm文件放在应用程序包中并将其在运行时复制到用户数据目录(例如RLMRealm.defaultConfiguration.path
)。
文件大小爆炸,因为没有发生压缩。您可以通过使用writeCopyToPath:
编写压缩副本来强制执行此操作。你可以这样做,例如在应用程序启动时,因为否则确保所有RLMRealm
实例在之前被拆除可能是非常简单的。