2009-11-26 2 views
11

정기적으로 정보를 외부 서버로 보내는 응용 프로그램을 개발 중입니다. 나는 백업 목적으로 전송되는 데이터의 로컬 복사본을 만듭니다.안드로이드 데이터 스토리지 - 파일 대 SQLite

배터리 수명을 절약하기 위해 데이터를 저장하는 가장 좋은 방법은 무엇입니까? 각 데이터 제출은 약 5K-10K의 직렬화 된 객체입니다 (이 클래스에는 날짜, 숫자 및 문자열을 포함한 5 개의 필드가 있음).

다른 아이디어가 있습니까?

답변

13

배터리 수명을 직접 알 수는 없지만 하나의 기준으로 관리하기가 쉽습니다. 데이터를 관리하는 작업이 적어지면 CPU주기가 줄어들고 배터리 수명이 연장됩니다.

나는 SQLite 옵션이 더 쉽다고 말할 것이다. 더 이상 필요하지 않은 오래된 제출물을 제거하는 데이터를 저장하는 SQLite 테이블에 날짜 열을 추가 할 수 있으며 모든 것이 원시 SQL 라이브러리를 통해 처리됩니다. 자신의 자바 코드로 파일의 전체로드 (또는 단일 파일의 악화)를 관리하는 것이 훨씬 더 많은 작업이 될 것입니다.

또한 데이터베이스에 데이터를 쓸 수 있으며 다시 읽어야 할 때까지 잊어 버릴 수 있습니다. 파일에 데이터를 저장하는 경우 Android application life cycle이라는 용어로 파일을 읽고 쓰는 중 일해야합니다. 배터리 걱정이된다면 파일을 자주 쓰기보다 메모리에 저장하는 것이 더 바람직하지 않지만 앱이 일시 중지 또는 삭제되었을 때 데이터가 손실되지 않았는지 확인해야합니다 . 내 의견으로는 SQLite 데이터베이스를 사용하는 것이 훨씬 쉽고 이것에 대해 걱정하지 않아도됩니다.

+0

의견을 보내 주셔서 감사합니다. 매우 합리적인 것처럼 보입니다. 데이터베이스가 항상 백그라운드에서 (전통적인 데이터베이스처럼) 실행되고 있는지 또는 애플리케이션이 그것을 사용할 때만 실행 중인지 알고 있습니까? 제 말은 "SQLite 서버"(안드로이드에 그러한 프로세스가있는 경우)가 제 응용 프로그램 때문에 시작된다는 것입니다. 아마 좋은 생각이 아닐 수도 있습니다. –

+10

afaik sqlite는 라이브러리를 통해 액세스하는 파일 일 뿐이며 실행중인 데이터베이스 서버는 없습니다. – tosh

15

SQLite db는 단순히 시스템의 파일이므로 (/data/data/<your_package>/databases/에 저장 됨) SQLite 또는 File을 사용하는지 여부는 중요하지 않다고 생각합니다. 적시에 하드 드라이브에 파일을 저장하는 것과 마찬가지로 적절한시기에 db에 커밋해야합니다. 즉, 한 가지 방법 또는 다른 방법으로 많은 하드 드라이브 쓰기를 사용할 수 있습니다.

내가 선택한 것은 어떤 종류의 데이터를 저장하는지에 달려 있다고 생각합니다. DB를 가질 수있는 능력 (예 : 질의)이 필요하다면, 반드시 SQLite를 사용하십시오. 그러나 db가 필요하지 않거나 격렬한 데이터가있는 경우 (그리고 관계형 데이터베이스에서 쉽게 설정할 수없는 경우) 파일을 가지고 갈 것입니다.

확실히 말해 줄 수있는 점은 이 아니라은 파일 저장에 직렬화를 사용하는 것입니다. Android 직렬화는 느리거나 느리거나 느리며 대용량 파일을 만듭니다. 성능상의 이유로 자체 XML 또는 JSON 형식을 작성하는 것이 훨씬 좋습니다.

4

응용 프로그램이 멀티 스레드입니까? 데이터 저장소에 액세스하는 스레드가 여러 개인 경우 SQLite를 사용합니다. SQLite가 잠금 문제에 대해 걱정할 수있게하십시오.

+0

일부 플랫폼에서는 SQLite가 스레드로부터 안전하지 않습니다 (Xamarin). – nVentimiglia