當我第一次在他們的網站上看到關於領域的時候,我很高興看到他們的基準測試。但是,當我回到限制部分時,我在那裏呆了2分鐘,並且正在考慮「跨線程的對象共享預防」。從內部來看,它告訴我要走向世界,但那種限制讓我失望。所以最後我決定實現某種包裝,它允許我在所有線程中共享這個對象。
這是事情。 讀取和寫入磁盤的過程需要更多時間,然後創建簡單對象。這是我用包裝創建進行的一點。
1)我保留允許在任何地方創建realmObject的子類的對象,以抵抗它們在創建它的同一線程上的對象訪問規則。
例如
XyzsubclassofRealmObject xyzObject = new XyzsubclassofRealmObject();
2)傳遞該對象執行數據庫操作
例如該方法
insertOrUpdate(xyzObject);
//implementation
insertOrUpdate(XyzsubclassofRealmObject object) //you can make this method generic to accept any object that is subclass of RealmObject
{
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
XyzsubclassofRealmObject databaseObject = realm.copyToRealmOrUpdate(object);
//notice this copyToRealmOrUpdate method provides by Realm
realm.commitTransaction();
XyzsubclassofRealmObject copyObject = clone(databaseObject);
return copyObject;
}
3)現在也有兩點,他們提到,
我想克隆,從copyToRealmOrUpdate返回的databaseObject的。由於沒有方法接口允許(即第二點),第一個點來幫助我。
public static XyzsubclassofRealmObject clone(XyzsubclassRealmObject databaseObject)
{
XyzsubclassOfRealmObject obj = new XyzsubclassofRealmObject();
obj.setXyz(databaseObject.getXyz());
return obj;
}
而不是調用,如下所示直接克隆的方法,我用反射的方法來調用clone方法,我寫了通用包裝執行數據庫操作,而不是針對特定的模式。你可以自由選擇你自己的方式
就是這樣。你完成了。如您所見,我們正在返回複製的對象而不是數據庫對象,您可以在任何線程上自由使用它。 :)
結論:許多博客和博文都表明,它的性能如此之快,在執行交易時在UI線程上使用它很好。但選擇取決於你。您不會預先知道在應用程序使用量增加的時候數據從數據庫進入或離開的數量。如果該交易將有足夠的數據來讓你的用戶界面呆滯,它會。此外,我們所有的開發人員都已經練習在工作線程而不是UI線程上執行數據庫和網絡操作,因此它不會停止任何UI交互。閱讀
過程和寫入磁盤需要更多的時間,然後簡單 對象創建
不幸的是我處理大量的數據!在實施Realm之前,我將等待這個功能被敲定出來 – 2014-10-28 16:40:26
您的案例中「多」是多少? – bmunk 2014-10-28 22:56:19
@ChristianMelChior:嗨。 Realm是否支持自定義排序順序?例如,我有一個有3個字段的表格:地理位置的名稱,經度和緯度。我想根據距當前位置的距離對結果進行排序(這取決於用戶的位置)。謝謝 – Rajat 2015-03-04 07:01:51