如何在Rhomobile中的create / update_attributes单次调用中插入/更新多个记录

时间:2013-08-20 13:37:09

标签: insert-update rhomobile rhodes multiple-records

根据Rhomobile的performance tip in Rhom API

我们应该首先准备整个数据集,然后调用create / update_attributes以获得比准备单个记录然后调用create inside循环更好的性能。

据我所知,create方法采用单个记录的对象,如下所示,

@account = Account.create(
  {"name" => "some new record", "industry" => "electronics"}
)

所以我想知道如何在一次通话中创建/更新多条记录?

提前致谢。

2 个答案:

答案 0 :(得分:1)

首先,我不知道这会对性能产生多大影响,无论是正面还是负面,并且从未测量过。

也就是说,您可以在事务中包装所有CRUD调用,以最小化打开和关闭的数据库连接。如果某些记录导致新数据集出现问题,这还可以帮助您维护参照完整性。

# Load all DB Models, to ensure they are available before first time import
Rho::RHO.load_all_sources();

# Get instance of DB to work transactions with
db = ::Rho::RHO.get_db_partitions()['local'] # Get reference to model db
db.start_transaction()  # BEGIN transaction

... Do all your create/update/deletes

if (was_import_successful)
  db.commit   # COMMIT transaction
else
  db.rollback() # ROLLBACK transaction
end

答案 1 :(得分:1)

使用Rhom,您仍然可以为底层SQLite引擎编写SQL查询。但是你需要了解你正在使用的表格格式。

默认 PropertyBags 数据模型都存储在单个表中的键值存储中,如果您正在寻找最高性能,则最好切换到 FixedSchema 数据模型。在这种情况下,您会失去一些灵活性,但是您可以获得一些性能并节省相同的空间。

我的建议是使用交易,就像你已经在做的那样,切换到 FixedSchema 数据模型,看看你是否正常。如果你真的需要提高速度,也许你可以用不同的方式实现你想要的东西,比如导入在服务器端创建的SQLite数据库。

这是RhoConnect用于bulk synchronization的方法。