2

根据Rhomobile的 Rhom API 中的性能提示,

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

据我所知,create方法将单个记录的对象像这样,

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

所以我想知道如何在一次调用中创建/更新多个记录?

提前致谢。

4

2 回答 2

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
于 2013-08-27T02:31:23.227 回答
1

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

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

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

这是 RhoConnect 用于批量同步的方法。

于 2013-09-05T19:19:54.237 回答