我正在试图将领域与Snappydb进行比较(对于那些想要看基准的人来说,这是
This is my repo).我想我的方式是错误的,因为存储到db的时间在与Sanppydb相比在Realm中花费了很长时间.
基准显示以下结果.如图所示,领域比Snappydb慢100-200倍.
我正在做的是先创建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); } } }); }
此解决方案使用1个分离对象来映射列表的内容.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。