2013-08-20 61 views
2

按照Rhomobile的的performance tip in Rhom API創建/ update_attributes方法,如何插入/更新多個記錄中Rhomobile的

我們應該準備整個數據先設置,然後調用創建/ update_attributes方法已有準備更好的性能單個記錄,然後調用內部循環創建。

按我的知識,創建方法採用單條記錄的對象這樣,

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

所以我不知道如何在一個單一的呼叫創建/更新多條記錄?

在此先感謝。

回答

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

我已經使用這些交易,它+會影響性能。但我需要一種方式,如果有的話,插入多個記錄在一個單一的創建查詢,就像這樣http://stackoverflow.com/questions/1609637/is-it-possible-to-insert-multiple-rows-at-一時間,在-AN-的SQLite數據庫 –

1

使用Rhom,您仍然可以爲基礎SQLite引擎編寫SQL查詢。但是你需要了解你使用的表格格式是什麼。

默認PropertyBags數據模型都存儲在一個鍵值存儲在一個單一的表,如果你正在尋找的最大性能,你最好切換到FixedSchema數據模型。在這種情況下,你會失去一些靈活性,但是你可以獲得一些性能並節省相同的空間

我的建議是使用交易,就像你已經在做的那樣,切換到FixedSchema數據模型,看看你是否正常。如果你真的需要提高速度,也許你可以用不同的方式實現你想要的,比如導入在服務器端創建的SQLite數據庫。

這是RhoConnect用於bulk synchronization的方法。