2013-07-26 3 views
0

원격 서버 (JSON 형식)에서 많은 양의 사용자 데이터를 다운로드해야하며이 데이터를 로컬 SQLite 데이터베이스에 삽입해야하는 iOS 앱이 있습니다. 너무 많은 데이터가 있기 때문에 삽입 프로세스가 완료하는 데 5 분 이상 걸립니다. 이는 받아 들일 수없는 것입니다. 과정은 30 초 미만이어야합니다.PHP를 사용하여 MySQL 쿼리를 SQLite로 출력

우리는 잠재적 인 해결책을 찾아 냈습니다 : 원격 서버가 원격 컴퓨터의 SQLite 데이터베이스에 사용자의 데이터를 저장하도록하십시오. 이 데이터베이스는 압축되어 앱에서 다운로드합니다. 따라서 앱에서 데이터 삽입을 수행 할 필요가 없어 프로세스가 훨씬 빨라졌습니다.

원격 서버에서 PHP/MySQL을 실행 중입니다.

내 질문 :

  • 원격 서버에 SQLite 데이터베이스를 만들 수있는 가장 빠르고 효율적인 방법은 무엇입니까?
  • MySQL 쿼리를 SQLite 테이블에 직접 출력 할 수 있습니까?
  • 임시 MySQL 데이터베이스를 만든 다음 SQLite 형식으로 변환 할 수 있습니까?
  • 아니면 MySQL 쿼리 출력을 가져 와서 각 레코드를 SQLite 데이터베이스에 삽입해야합니까?

모든 의견을 크게 기뻐할 것입니다.

+0

'인가가 가능 임시 MySQL 데이터베이스를 만든 다음 SQLite는 형식으로 변환하는'는 이쪽을 봐 http://stackoverflow.com/questions/3890518/ convert-mysql-to-sqlite – PeterMmm

+0

'원격 서버에 SQLite 데이터베이스를 만드는 가장 빠르고 효율적인 방법은 무엇입니까? ''$ db = sqlite_open ('mydatabase ');' – Dale

답변

2

삽입 프로세스가 5 분이 걸리는 이유를 살펴 보는 것이 좋습니다.

SQLite에서 제대로 수행하지 않으면 모든 삽입 문이 별도의 트랜잭션으로 실행됩니다. 이것은 매우 느린 것으로 알려져 있습니다. 하나의 단일 SQLite 트랜잭션에서 모든 삽입 작업을하는 것이 훨씬 좋습니다. 많은 레코드에 대해 이야기하고있는 경우에도 삽입 프로세스가 정말 빨라야합니다.

의사 코드에서

, 다음에해야합니다

SQLite.exec('begin transaction'); 
for (item in dataToInsert) { 
    SQLite.exec('insert into table values (...)'); 
} 
SQLite.exec('end transaction'); 

동일 방식으로 적용하면 PHP에서 SQLite 데이터베이스를 만들려면.

당신은 여기에 대해 많은 읽을 수 있습니다

: Improve INSERT-per-second performance of SQLite?

관련 문제