2013-05-14 2 views
1

두 개의 열로 구성된 큰 CSV 파일 (8000 개의 행)이 있습니다. 첫 번째 열은 1에서 10000 사이의 정수이고 두 번째 열은 6에서 10 자의 문자열입니다. 구현은 Android이므로 AssetManager를 사용하여 파일에 액세스하고 있으므로 파일에서 읽으려면 InputStream을 사용해야합니다.연속적인 정수를 String으로 매핑하는 CSV 파일을 어떻게 색인화하여 Java에서 효율적으로 검색 할 수 있습니까?

시스템에 대한 입력은 1에서 10000 사이의 정수이며 출력은 해당 문자열이거나 일치하는 정수가없는 경우 null입니다. 앱의 일반적인 사용 사례에는 여러 (~ 4) 개의 요청이 포함됩니다. 각 요청은 현재 구현에서 앱을 2-3 초 동결합니다.

메모리에 전체 파일을 저장하지 않고 전화 번호부 (즉, O (log (n)) 시간) 검색을 사용하여이 검색을 효율적으로 수행 할 수 있기를 원합니다. 필자는 CSV 파일을 다른 형식으로 다시 포맷해야한다고 가정합니다. 아마도 SQL 데이터베이스일까요? 이 경우 적절한 구현은 무엇입니까?

나는 대규모 데이터 액세스에 완전히 익숙하지 않으며, 파일을 메모리에로드하고 Android에서 액세스하는 방식이 약간 퍼지기 때문에 내 정신적 인 모델이라고 할 수 있습니다. 미리 감사드립니다.

답변

2

csv 파일을 SqLite 데이터베이스로 가져 오는 것이 좋습니다. 바로 여기에 대한 링크가 있습니다 : SqLite3 CSV 그리고 여기에 안드로이드와 함께 SqLite 사용에 대한 훌륭한 지침서가 있습니다 : Android SQLite Database and ContentProvider - Tutorial

+0

얼마나 시원한가요? 그 링크에 대해 정말 고마워요. 제가 필요로하는 것과 똑같아 보입니다. 그런 다음 데이터베이스를 Android 자산 폴더에 일반 파일로 패키지합니까? – Jamie

+0

이것이 필요한 것일 수 있습니다. http://www.chriskopec.com/blog/2010/mar/13/deploying-android-apps-with-large-databases/ – bytebender

1

그렇습니다. 내부 메모리 나 SD 카드에 저장할 수 있습니다. 또한 SQLite로 데이터를 마이그레이션하는 것이 좋습니다. 그 링크를 확인해 봤는데 정말 좋았어.

관련 문제