BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Realm获得了10亿的用户,10万活跃的开发者,并且发布了1.0版本

| 作者 James Chesters 关注 2 他的粉丝 ,译者 薛梦迪 关注 0 他的粉丝 发布于 2016年6月8日. 估计阅读时间: 9 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

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 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 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>() {
    @Override
    public void onChange(RealmResults 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
    }
});

在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)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT