我是Realm的新手(使用Xamarin版本在Visual Studio 2015中进行Android开发),并且想了解处理事务的最佳实践。
由于Realm要求在事务中进行对RealmObject的字段的所有写入操作,因此,如果您决定将数据绑定到此类对象,以便最终用户可以通过UI对其进行编辑,则必须保留一个未完成的事务,直到用户单击“保存”为止。 ..这可能会在几秒钟或更长的时间内发生。
Realm使用MVCC来管理并发性,因此读取永不阻塞,而写入仅阻塞其他写入(这是我的理解),因此尽管解决了一个坏主意(至少对于我们以前使用SQL Server的人是个坏主意),但并不能使事务长期运行如果读取不被阻塞,那么在Realm中似乎并不那么糟糕。但这对我来说仍然是错的。
相关问题:
1)建议将数据绑定到RealmObjects的方法是什么?
2)是否在任何UI上下文中使事务处于打开状态,而该事务可以在无法预测的时间内保持打开状态,则可能是潜在的错误或性能差的原因?
在此先感谢(这也是我关于SO的第一个问题-希望我没有超出指南的范围!)。
是的,这对我们来说也是错的:-)
我们的想法有所改善(https://github.com/realm/realm-dotnet/issues/647),因此您不必诉诸于此。
关于您的其他问题:
1)这篇博客文章有一些细节,我不知道这是否对您有帮助。如果您有其他更具体的问题,请随时提出。
2)长期事务在某种程度上是反模式,在Realm和SQL数据库中都是如此。在提交事务之前,更新状态不会一直保持,因此,如果事务表示很多更改并且您的应用崩溃,您的用户可能会丢失工作。此外,其他尝试读取的线程将访问旧版本,如果尝试写入,则将阻塞它们,直到提交事务为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句