RealmがiOSおよびAndroidのためのオブジェクト指向データベースのバージョン1.0をリリースした。
Realmは2年前にローンチされ、SQLiteやCore Dataのようなオンデバイスの技術を使うよりも、もっと簡単で高性能な代替を提供しようとしている。
Realmの技術チームはInfoQに対し、最新リリースで注目すべき変更として、クエリ言語の改善があると述べた。部分文字列マッチ、リレーションシップのトラバーサル、マルチフィールドソート、distinctマッチをサポートする。これは他の改善にもつながっている。Androidライブラリのフットプリントは70%まで削減され、顧客に提供するアプリのサイズを小さくできる。そして、Realm Configurationクラスの導入は、複数のRealmを持つアプリが増えるのに役に立つ。
.NET開発者のためのリアクティブデータベース、Realm Xamarinのローンチに続いて、Realm 1.0のChangelogは、次のようなサポートについて言及している。
- AppleのSwift言語、Realm Swiftによる
- Carthage、Swiftの依存管理マネージャ
- AppleのwatchOSとtvOS
- Android上のRxJava
- Kotlin、Androidアプリ開発のための新しい言語
ブログ記事「13,949 Commits and 6,148 Closed Issues Later: Thank You for Helping Realm Reach 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
}
});
Hacker NewsにおけるRealm 1.0に関するディスカッションで、今回のメジャーリリースは肯定的に受け取られているようだ。多くのユーザーが賛辞と祝福の言葉を述べている。Realmのクローズドソースである「core」にまつわるディスカッションで、ユーザーのmahyarm氏はRealm FAQから次のように引用した。
コードに「core」の参照があります。これは何ですか?
coreは内部C++ストレージエンジンのことを指しています。今のところオープンソースではありませんが、きれいにして、名前を変え、内部の主要な機能が完成したら、Apache 2.0ライセンスでオープンソース化するつもりです。それまでは、そのバイナリリリースをRealm Core (TightDB) Binary Licenseのもと利用できます。
またRealmは、1.0のリリースと合わせて、それを利用したiOSおよびAndroidアプリで10億エンドユーザー越えのマイルストーン達成について報告している。
ニュースにコメントして、RealmのCEO Alexander Stigsen氏は、「その急速な成長と、Realmを使ってモバイルインフラを支えている会社のレベルに、ワクワクしています。10億エンドユーザー(ほとんどの会社が到達していないマイルストーン)を達成したことは、モバイルデータストレージに対する私たちのイノベーティブなアプローチの需要を証明するものです。
Rate this Article
- Editor Review
- Chief Editor Action