2013-08-20 10 views
2
Rhomobile의 performance tip in Rhom API 당으로

에/update_attributes을 만들 수 있습니다 단일 레코드를 만들고 루프 내부를 호출합니다.삽입하는 방법/업데이트 여러 레코드는</p> <p>우리는 준비를 통해 더 나은 성능을 위해 생성/update_attributes 전화를 먼저 설정 한 전체 데이터를 준비해야하고, Rhomobile

내 지식을 당로서,

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

그래서 내가 단일 통화/업데이트 여러 레코드를 만드는 방법을 궁금해 방법이 등 단일 레코드의 오브젝트를 만들?

미리 감사드립니다.

답변

1

우선, 실제로 성능에 영향을 미칠지, 긍정적이든 부정적이든간에 결코 측정하지 못했습니다.

즉, 열거 나 닫힌 DB 연결을 최소화하기 위해 모든 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- a-time-in-a-sqlite-database –

1

Rhom을 사용하면 여전히 기본 SQLite 엔진에 대한 SQL 쿼리를 작성할 수 있습니다. 그러나 사용중인 테이블 형식이 무엇인지 이해해야합니다. 당신이 최대의 성능, 당신이 더 나은 스위치 에 FixedSchema 데이터 모델을 찾고 있다면

기본 PropertyBags 데이터 모델은 모두 하나의 테이블에 키 값 저장소에 저장됩니다. 이 경우 약간의 융통성이 느슨하지만 성능은 향상되고 동일한 공간을 절약 할 수 있습니다.

내 제안은 이미하고있는 것처럼 거래를 사용하는 것입니다. FixedSchema 데이터 모델로 전환하여 문제가 없는지 확인하십시오. 속도를 정말로 높일 필요가 있다면, 서버 측에서 생성 된 SQLite 데이터베이스를 가져 오는 것과 같은 다른 방식으로 원하는 것을 얻을 수 있습니다.

RhoConnect가 bulk synchronization에 사용하는 방법입니다.