2013-10-31 4 views
0

저는 최근에 파이썬에서 프로그래밍을 시작했으며 데이터베이스를 만드는 중입니다.수백만 개의 JSON 파일을 검색하는 가장 좋은 방법은 무엇입니까?

나는이 모든 파일을 원본에서 모두 추출 했으므로 모두 내 컴퓨터의 디렉토리에 있습니다.

이러한 파일은 모두 같은 방식으로 구성되어 있으므로이 다차원 사전을 검색하고 특정 키 집합의 값을 찾습니다.

이 JSON 파일은 모든

{ 
"userid": 34535367, 
"result": { 
    "list": [ 
     { 
      "name": 264, 
      "age": 64, 
      "id": 456345345 
     }, 
     { 
      "name": 263, 
      "age": 42, 
      "id": 364563463456 
     } 
    ] 
} 

내 경우}

, 내가 관련 데이터 (품질, ID와를 "이름"키를 검색하고 반환하고 싶습니다 유사하게 구성되어 원래의 사용자 ID)를 수백만 개의 JSON 파일에서 가져온 것과 같습니다.

기본적으로 나는 이것에 아주 새롭고 내가 가지고있는 프로그래밍 지식은 파이썬에있다. 내가 원하는 것을 배우기 시작한 것은 기쁘지만 어느 방향으로 나아갈 지 확신하지 못합니다.

+0

이 데이터가 적절한 데이터베이스 대신 수백만 개의 JSON 파일에있는 이유가 있습니까? – NullUserException

+0

웹 API를 통해이 모든 것을 호출해야했는데 200 만 개가 넘는 옵션을 이제는 1 억 개의 옵션으로 필터링했습니다. – user2942213

+1

얼마나 자주 데이터를 쿼리하고 업데이트해야하는지에 따라 데이터베이스에 데이터를 삽입하는 것이 좋습니다. – NullUserException

답변

1

제안 사항으로 모든 수신 파일을 처리하고 데이터를 데이터베이스에 삽입하는 것이 어떻습니까? 해당 데이터베이스를 쿼리하는 툴 세트가 있습니다. 할 것입니다 예 (뿐만 아니라 다른 더 정교한 데이터베이스)에 대한 SQLite에 : http://www.sqlite.org/ http://docs.python.org/2/library/sqlite3.html

간단한 다른 솔루션은 파일 매핑 name_id to /file/path을 구축 할 수 있습니다. 그럼 당신은 logarithmically 이름으로 이진 검색 할 수 있습니다. 하지만 인덱스를 유지 관리하는 것이 삽입/삭제를 수행하는 것보다 더 귀찮은 데이터베이스가 될 수 있으므로 적절한 데이터베이스를 사용하는 것이 좋습니다. 목표 데이터베이스를 작성하는 경우

+0

다른 데이터베이스를 사용하여 데이터베이스를 생성하는 것은 중복 된 것처럼 보인다. :) –

+0

@lcfseth 그는 현재 데이터베이스가 없습니다. 그냥 json 파일. – Izkata

+0

저는 솔직히이 사실을 생각하지 않았습니다. 나는 여전히 모든 선택에 대해 배우고 있습니다. 데이터베이스 전체를 다운로드 할 수있는 권한이 없기 때문에 다른 데이터베이스를 만들면 아마도 갈 수 있습니다. 방금 1 단계를 생각하고 데이터를 얻었습니다. 2 단계, 데이터 검색,하지만 가능성을보기 시작 해요 – user2942213

2

, 당신은 어떻게 데이터베이스 작업에 보일 것입니다 및 JSON 문서로도 작동 당신이 지금 해결하기 :) (mangodb 같은)

되는 NoSQL 데이터베이스를 시도하고 같은 문제를 해결 문서를 검색하고 필터링 할 수있는 도구 전체를 구현합니다.

질문에 답하기 위해 데이터 (메타 데이터라고 함)에 대한 다른 정보를 저장하는 사전 처리를 수행하지 않으면 빠른 방법이 없습니다. 이것은 큰 주제이며 모든 답변을 드릴 수있는 전문 지식이 충분하지 않지만 간단한 팁을 제공 할 수 있습니다 : 인덱스 사용.

인덱스는 정렬 된 키/값 맵으로 모든 값에 대해 해당 값 (또는 Json 문서의 파일 + 위치)이 포함 된 문서를 저장합니다. 예를 들어 이름 속성에 대한 인덱스이 좋아하는 것 : 가장 쿼리 값에 대한 인덱스를 유지함으로써

{ 
263: ('jsonfile10.json', '0') 
264: ('jsonfile10.json', '30'), 
# The json document can be found on the jsonfile10.json file on line 30 
} 

을, 당신은으로 새 문서를 삽입하는 것을 언급 대수 시간 검색에 선형 시간 검색을 설정할 수 있습니다 훨씬 더 빨리. 귀하의 경우에는 이름 필드에만 색인이 필요합니다.

색인 만들기/업데이트는 문서를 삽입, 업데이트 또는 제거 할 때 수행됩니다. 균형 2 진 트리를 사용하면 색인의 갱신을 가속화 할 수 있습니다.

관련 문제