【发布时间】:2016-09-08 03:14:01
【问题描述】:
我正在尝试将 Realm 与 Snappydb 进行比较(This is my repo 对于那些想要查看基准的人)。我想我的方法是错误的,因为与 Sanppydb 相比,Realm 中的 store-to-db 时间需要很长时间。
基准测试显示以下结果。如图所示,Realm 比 Snappydb 慢 100-200 倍左右。
我正在做的是首先创建 10,000 个对象,然后将它们存储到数据库中。因此,在我的代码中,我以这种方式存储了一个 Booking 对象(有一个迭代 10,000 次的 for 循环):
public void storeBooking(final Booking booking) {
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Booking realmBooking = realm.createObject(Booking.class);
realmBooking.setId(booking.getId());
realmBooking.setCode(booking.getCode());
realmBooking.setFareLowerBound(booking.getFareLowerBound());
realmBooking.setFareUpperBound(booking.getFareUpperBound());
realmBooking.setPhoneNumber(booking.getPhoneNumber());
realmBooking.setPickUpTime(booking.getPickUpTime());
realmBooking.setRequestedTaxiTypeName(booking.getRequestedTaxiTypeName());
realmBooking.setTaxiTypeId(booking.getTaxiTypeId());
}
});
}
更新
这是用于存储 Booking 对象的 Snappydb 方法。
public void storeBooking(final String key, final Booking booking) {
try {
mSnappyDb.put(key, booking);
} catch (SnappydbException e) {
e.printStackTrace();
}
}
更新
使用insertOrUpdate() 方法和一笔交易的新结果
【问题讨论】:
-
您能分享您与之比较的 SnappyDB 代码吗?
-
@bdash 我刚刚更新了我的问题。请看一看。谢谢。
-
据我所知,通过您对 Realm 的实现,您必须创建一个领域实例,这需要时间和内存(这里我们必须创建 10.000 次)。所以在我看来,你应该先尝试运行一个循环来创建 10.000 个预订,然后将它们存储在一个只有一个领域实例的事务中。
-
显示for循环。回答这个问题很重要。
-
但从技术上讲,您在 10000 个事务中保存了 10000 个对象,并为它创建了 10000 个对象,所以这几乎是最糟糕的方法,哈哈