지금 트위터앱을 개발중인 초보 프로그래머입니다..
트위터 서버에서 Timeline데이터를 받아 그냥 화면에 표시만 하면 될거라고 생각했는데
개발서들을 보면 SQLite를 써서 로컬에 저장하더군요..
그러다보니 동기화문제때문에 프로그램이 좀 복잡해지네요
굳이 그럴 필요가 있는건지 궁금합니다.
트위터 자료를 폰에 저장해놓고 인터넷 안터지는 지역에서 트위터할 사람은 없을텐데
오 언제나 따뜻한 가르침을 남겨주시는 동네가수 고수님이시네요. 저 또한 동네가수님 말씀대로 성능상의 이슈를 해결하고자 비슷한 방법을 쓰고 있는데 한가지 궁금이 일어 질문을 남깁니다.
특정 데이터를
1. Sqllite를 써서 저장하는 것과
2. 데이터 클래스 객체(?...용어를 몰라서 이렇게 표현했는데,,Class Student implenment 직렬화.에 인스턴트 변수로 id,name등을 지정하고 ArrayList<Student>에 삽입하여 어플리케이션 설치 폴더상에 저장하는 방식)를 사용하여 FileWriter or FileReader로 i/o작업을 행하는...
위 두가지 방식은 어떤 차이점이 있으며 대규모 데이터를 처리하는데 어떤 방식이 낳을지요?
현재 후자의 방식을 적용하여 어플리케이션을 돌리고 있는데,, 아직까지는 별다른 문제점이 발생치 않았지만 사용자가 늘게 되면 처리해야할 데이터가 늘게 될 것이고 어떤 방법을 택하는 것이 효율적일지 고민이 되어 질문을 남깁니다.
SQLite쪽이 버전관리나 유지보수 속도 모든면에서 좋을듯 합니다. 데이터가 많을경우 limit등을 써서 원하는 양만큼 잘라서 불러올 수도 있고 자체적으로 컬럼이 추가되거나 테이블이 추가될 때 DB 버전관리도 손쉽게 해줄 수 있구요 게다가 현 방식은 데이터를 불러왔다가 다시 저장할 시점에 추가 수정된것을 append 하지 못하고 새로 써서 저장하는 방법 밖에 없지 않나요 아무리생각해도 SQLite 보다 좋은점이 없어 보입니다. 단지 데이터를 담은 ValueObject 인스턴스가 멤버로 List 같은 컬렉션 타입을 가질 때 그냥 바로 저장하면 된다는게 그나마 하나의 장점이라고 할 수 있겠습니다. (여담이지만 제가 Mongo DB에 대해 잠시 설명을 들은적이 있는데 Mongo DB 같은 구조의 DB라면 이런 아쉬운점까지도 없어지지 않을까 싶습니다)
그리고 안드로이드에서 다른 프로세스에 인텐트에 데이터를 담아보낼때 기존 자바의 직렬화인 Serialize를 쓰지 않고 Parcelable을 쓰는 이유가 성능 때문이 그런걸로 압니다
답변감사드립니다 동네가수님! 그동안 깜빡 잊고 있었는데 동네가수님 말씀대로 확실히 Parcelable로 전환 작업을 해야겠네요. ㅠ 작업량이 많지는 않지만 Endless Coding...ㅠ
그리고 SQLite에 관한 설명도 감사드립니다. 여태 SQLite에 관한 필요성을 못 느껴왔고 다른 방식으로 우회해 왔기에 이번 기회를 통해 공부를 해보아야 겠습니다. 그런데 제 질문이 설명하고자 하는 요점에서 벗어났었는데 다시 드려도 될런지요? ^^;
- 상황 :
1. 저장하고자 하는 데이터는 마치 Cookie처럼 다뤄지는 것(본 게시물의 트위터 메시지도 비슷한 관점에서 풀이되지 않을까요? 고정적이지 않고 언제든지 변할 수 있으며 어플내에 저장할 필요성은 없는..)
2. 인터넷 익스플로어(as 어플리케이션)가 네이버(as DB서버)에서 검색 결과 리스트를 불러와서 사용자에게 그 결과물을 보여주며, 이 순간 대소량의 검색 결과 리스트 정보는 익스플로어의 Cookie처럼 다루고자 임시적으로 저장,관리가 필요하게 됩니다. 이와 같은 형식의 데이터를 관리하기 위해선 SharedPreference,SQLite,직렬화된 File I/O가 떠오르는데 최선의 선택은 역시 SQLite 일런지요? 혹은 안드로이드 API상에서 Cookie 기능을 위한 다른 해법을 찾아보면 될까요?
3. 상기 데이터는 익스플로어(as 어플리케이션)가 종료되는 시점에 사라집니다.
- 제약 조건 :
1. 리스트 형태를 저장할 수 있어야 하며, (SP 탈락. 혹시 SharedPreference에 리스트 형태의 데이터를 저장할 수 있을까요?)
2. 처리속도가 빨라야 하고(SQLite가 직렬화된 File I/O보다 빠른가요? 그렇다면 또 Endless Coding..허나 이 경우엔 공부도 좋네요 ^^)
3. 리스트의 각 아이템에 대한 insert,delete,replace(or set) 작업이 가능해야 한다(File I/O로 데이터 수정시 필요한 읽고(FileRead-1회) 수정작업하고 쓰고(FileWrite-1회(총2회)하는 작업량과 속도적인 측면에서도 역시 SQLite가 좋다...라면 날밤새야겠네요 언제 다 바꾸지ㅋ 허나 이 또한 공부가 되니 좋네요 ^^)
4. 가능한 메모리 사용은 적게( Cookie처럼 있으면 좋고 없으면 말지정도의 중요도라면 가능한 메모리 사용을 줄일 수 있도록 하는데 SQLite 사용에 대한 메모리 요구량은 기본적인 File I/O와 비교하여 얼마나 차이가 있을런지 궁금합니다...)
긴...질문글이 된 듯 싶습니다. 긴 글 읽어주셔서 감사드리며 위와 같은 경우에서도 마찬가지로 SQLite를 선택하는 것이 최선인지 알려주시면 다시 한번 감사의 인사를 드리고 싶습니다. 어쨋든 SQLite도 조금씩 배워가야 겠군요,,ㅋ




성능때문입니다. 가령 생각해보면 모르고 백키를 눌렀다 다시 들어오는것만으로 타임라인에 새로운 글이 없는데도 불구하고 페이지를 다시 받아오게 됩니다. 모바일 기기에서는 언제나 인터넷이 느리거나 혹은 가끔 끊길 수도 있다고 가정을하고 만들어야 합니다.