Realm 针对 iOS 和安卓发布了它作为面向对象数据库的 1.0 版本。
两年前的发布后,Realm 打算为了使用设备上的技术,例如SQLite 或Core Data,而提供一个更简单的、性能更高的选择方案。
Realm 的技术团队告诉 InfoQ:在移动数据库的最新发布中值得注意的变化是一个改进的查询语言,其中支持了部分的字符串匹配、关系遍历、多字段排序和去重匹配。本版本还伴随着一些其他的改进,包括在安卓上减少了 70% 的库资源占用,它使用户提交更小型的应用成为可能,并且引入了 Realm 配置类,为越来越多的拥有多 Realm 的应用提供服务。
继它最近的一个为.NET 开发者的响应式数据库 Realm Xamarin 的发布,Realm 1.0 的变更日志包括了以下的支持:
- 通过 Realm Swift 支持苹果的 Swift 语言
- Carthage,Swift 的依赖包管理
- 苹果的 watchOS 和 tvOS
- 安卓上的 RxJava
- Kotlin,安卓应用开发的新兴语言
在“ 13949 次提交和 6148 个已关闭的问题之后:感谢大家帮助 Realm 到达 1.0 版本”的博客文章中,Realm 团队展示了下面的 Java 展示的内联代码:
// Define you model class by extending RealmObject public class Dog extends RealmObject { private String name; private int age; // ... Generated getters and setters ... } public class Person extends RealmObject { @PrimaryKey private long id; private String name; private RealmList<dog> dogs; // Declare one-to-many relationships public Person(long id, String name) { this.id = id; this.name = name; } // ... Generated getters and setters ... } // Use them like regular java objects Dog dog = new Dog(); dog.setName("Rex"); dog.setAge(1); // Create a RealmConfiguration that saves the Realm file in the app's "files" directory. RealmConfiguration realmConfig = new RealmConfiguration.Builder(context).build(); Realm.setDefaultConfiguration(realmConfig); // Get a Realm instance for this thread Realm realm = Realm.getDefaultInstance(); // Query Realm for all dogs younger than 2 years old final RealmResults<dog> puppies = realm.where(Dog.class).lessThan("age", 2).findAll(); puppies.size(); // => 0 because no dogs have been added to the Realm yet // Persist your data in a transaction realm.beginTransaction(); final Dog managedDog = realm.copyToRealm(dog); // Persist unmanaged objects Person person = realm.createObject(Person.class); // Create managed objects directly person.getDogs().add(managedDog); realm.commitTransaction(); // Listeners will be notified when data changes puppies.addChangeListener(new RealmChangeListener<realmresults><dog>>() { @Override public void onChange(RealmResults<dog> results) { // Query results are updated in real time puppies.size(); // => 1 } }); // Asynchronously update objects on a background thread realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { Dog dog = bgRealm.where(Dog.class).equals("age", 1).findFirst(); dog.setAge(3); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { // Original queries and Realm objects are automatically updated. puppies.size(); // => 0 because there are no more puppies younger than 2 years old managedDog.getAge(); // => 3 the dogs age is updated } }); </dog></dog></realmresults></dog></dog>
在 Hacker News 中对 Realm 1.0 的探讨中,围绕主要版本的讨论气氛很积极,其中很多用户给予了他们赞扬和祝贺。在有关 Realm 的闭源“内核”的探讨中,用户 mahyarm 提到了 Realm FAQ 中的评论者:
我在代码中看到指向“内核”的引用,那是什么?
内核是指向我们内部的 C++ 存储引擎。它现在不是开源的,但是我们也确实计划:一旦我们有机会将其整理干净、重命名并最终确定它内部的主要功能,就在 Apache 2.0 许可证下将其开源。同时,它的二进制版本在 Realm 核心(TightDB)二进制许可证下发布。
在 1.0 版本发布的同时,Realm 还汇报了他们的新的里程碑:拥有超过十亿在它支持的 iOS 和安卓应用上的终端用户。
有关对此新闻的看法,Realm 的 CEO Alexander Stigsen 说道:“能看到我们成长之快和使用 Realm 来巩固移动基础设施的公司的高水准是十分激动人心的。达到了十亿的终端用户是一个很少有公司能够达到的里程碑,是一个我们探求移动数据存储创新方法的证明。”
查看英文原文: Realm reaches 1B users,100k active developers, launches version 1.0
感谢夏雪对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论