我正在试图将领域与Snappydb进行比较(对于那些想要看基准的人来说,这是
This is my repo).我想我的方式是错误的,因为存储到db的时间在与Sanppydb相比在Realm中花费了很长时间.
基准显示以下结果.如图所示,领域比Snappydb慢100-200倍.@H_404_3@
我正在做的是先创建10,000个对象,然后将它们存储到数据库中.所以,在我的代码中,我以这种方式存储一个Booking对象(有一个循环遍历10,000次):
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()方法和一个事务的新结果
解决方法
您的原始解决方案可以在10000个事务中保存10000个对象,并为其创建10000个对象,这几乎是最糟糕的可能方法.
技术上正确的方法应该是:
public void storeBookings(final List<Booking> bookings) { mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { realm.insertOrUpdate(bookings); } }); }
在大多数情况下,当保存的对象与原始对象不一样时,我所做的是这样的:
public void storeBookings(final List<Booking> bookings) { mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { RealmBook realmBook = new RealmBook(); for(Booking booking : bookings) { realmBook = mapper.toRealm(booking,realmBook); // does not create new instance realm.insertOrUpdate(realmBook); } } }); }