2011-01-04 6 views
2

문제가있어서 NoSQL 솔루션이 해결책이라고 생각하지만 확실하지 않습니다. 또한, 어떤 유형의 NoSQL DB (객체, 문서, 그래프, 키 등)가이 문제를 해결하기에 가장 적합한 지 확신하지 못합니다.NoSQL이 특정 데이터베이스 문제에 가장 적합한 옵션입니까

문제 :

나는 두 개의 컬렉션을 가지고있다. CollectionA는 2K + 문자열 (도메인 이름)을 포함합니다. CollectionB가 훨씬 크고 외모 (의사)이 같은 :

{ 
    "To" : "[email protected],[email protected],[email protected]_address.com", 
    "Bcc" : "[email protected],[email protected],[email protected]_address.com", 
"From" : "[email protected],[email protected],[email protected]_address.com", 
"Subject" : "Email Subject", 
"Unknown" : "NumberOfFields", 
"N" : "PlusOneExtraFields", 
} 

과학적 이해를 :

  1. 이받는 사람, 숨은 참조에 나와있는 사람들의 100 단위, 그리고에서 수 문자열.
  2. 받는 사람, 보낸 사람, 숨은 참조 필드를 폭발시키는 좋은 방법이 없습니다.
  3. To, From, Bcc 필드를 폭발시킬 방법이 없으면 문자열을 검색해야합니다.
  4. 몇 가지 알려진 필드가 있지만 알 수없는 필드가 많이 있습니다.
  5. 요구 사항이 없습니다 현재 알 수없는 필드를 통해 검색을 호출합니다.
  6. 데이터베이스 엔진은 Windows 데스크톱에서 실행해야합니다. 생각의

현재 라인 :

이되는 NoSQL 솔루션 및 어쩌면는 C# 동적 키워드를 사용하십니까? 퍼지

  1. 이 easitly 문서 데이터베이스에 의해 해결되는 문제인가?

  2. 이 유형의 데이터 구조를 검색/비교할 때 Map/Reduce?

+0

데스크톱이 64 비트 Windows를 실행하고 있습니까? 그렇지 않다면 목록에서 MongoDB를 건너십시오. 32 비트를 실행할 수는 있지만 제한을 맞추기가 매우 쉽기 때문에 데이터베이스는 사용할 수 없기 때문입니다. –

+2

솔직히 말하면 실제로 필요한 것은 From/To/Bcc 필드를 폭발시키는 것입니다. 이것이 없다면 당신은 아마도 당신이 사용하는 데이터베이스 기술에 관계없이 매번 전체 집합을 통해 무차별 강제 검색을 수행하게 될 것입니다. 왜 그들을 폭발시킬 수 없습니까? –

+1

전적으로 @HighTechRider에 동의합니다. 데이터의 비정규 화 (사용자가 넣는대로 분해)는이 인스턴스에서 성능이 뛰어난 쿼리에 필수 요소입니다. 이를 사용하지 않으면 전체 데이터 세트를 문자열로 다시 검색 할 수 있습니다. – stephbu

답변

1

전적으로 @HighTechRider에 동의합니다. 데이터의 양이 많은 경우 비정상 성 데이터 (사용자가 지정한대로 분해)는 성능상의 쿼리에 반드시 필요한 것 같습니다. 그렇지 않으면 어떤 제품이든 상관 없습니다 당신이 골라서, 그것은 유행 또는 다른 사람의 자유 텍스트 스캔 인 것을 끝낼 것이다.

@ chx의 스핑크스 제안은 적어도 후자를 가속화하는 데 그럴듯 해 보입니다. 그러나 그 경로에는 숨겨진 비용이 있습니다. 소프트웨어와 함께 다른 사람의 서비스를 번들, 설치, 관리, 패치 및 업데이트해야합니다.

인덱싱 및 쿼리에서 데스크톱 리소스 사용을 최소화하는 것이 최우선 적이어야하며 데스크톱에 자유 텍스트 서버를 설정하는 것은 다소 위법입니다.

파일 시스템 개체를 사용하여 비정규 화 된 데이터를 나타내는 기본 파일 시스템으로 시작합니다. 또는 쿼리를 표현하고 실행하는 것이 너무 복잡해 보인다면 SQLite 또는 SQL Compact Edition과 같은 간단한 임베디드 테이블 라이브러리를 살펴보고 이국적인 서버 대상 제품을 데스크톱에 추가하십시오. 여기에 SQL 콤팩트 에디션 대 SQLite는의

니스 비교 :

http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.compactframework/2005-12/msg00019.html

SQLite는 또한 미래에 당신의 "알 수없는 필드"시나리오의 일부를 커버 무료 텍스트 인덱스를 만들 수 있습니다.

map-reduce의 경우 전략은 접근하려는 도메인에 유효합니다.

+0

텍스트 파일을 검색하여 여러 번 사용하거나 구문 분석하고 저장할 수있는 리소스를 더 잘 활용할 수 있습니까? SOMETHING (db, nosql)에서 검색 할 때 검색이 필요하면 – detroitpro

+0

좋은 질문입니다. 삽입 읽기 비율에 따라 다릅니다. 클라이언트 삽입 응답 및 쿼리 응답을 거래하고 있습니다. 대부분의 경우, 더 비싼 쿼리 연산을 여러 번 수행하는 것보다 삽입시 파싱/확장/폭발이 저렴합니다. 보통 가장 빠른 삽입과 가장 반응이 빠른 쿼리 사이의 절충안입니다. – stephbu

0

XML로 저장하고 스핑크스로 검색하십시오. xmlpipe2를 사용하여 grep과 같은 것을 통해 스핑크스를 먹이면 알려진 필드 만 피드로 전달할 수 있습니다. 추가로 검색해야하는 경우 해당 필드를 필터와 스키마 및 다시 색인에 추가하십시오. 스핑크스는 이와 같은 속도로 색인을 생성 할 수 있으므로 실제 문제는 없습니다. 또한 배포 할 수 있습니다.

당신은 문자 검색을 원하고 있습니다. 즉, solr 또는 sphinx를 의미하며, 두 스핑크스 사이에서 Windows 바탕 화면에 설치하는 것이 더 쉽습니다.

0

나는 이것이 아파치 lucene.net에 적합한 후보라고 생각한다.

는이

  Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document(); 

     doc.Add(new Lucene.Net.Documents.Field(
      "To", 
      ToData, 
      Lucene.Net.Documents.Field.Store.YES, 
      Lucene.Net.Documents.Field.Index.ANALYZED, 
      Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS)); 


     doc.Add(new Lucene.Net.Documents.Field(
      "From", 
      FromData, 
      Lucene.Net.Documents.Field.Store.YES, 
       Lucene.Net.Documents.Field.Index.ANALYZED, 
      Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS)); 

     doc.Add(new Lucene.Net.Documents.Field(
      "BCC", 
      BCCData, 
      Lucene.Net.Documents.Field.Store.YES, 
      Lucene.Net.Documents.Field.Index.ANALYZED, 
      Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS)); 

    // Since you dont want Unknown field to be indexed, you can make it Index.NO. 
     doc.Add(new Lucene.Net.Documents.Field(
      "Unknown", 
      BCCData, 
      Lucene.Net.Documents.Field.Store.YES, 
      Lucene.Net.Documents.Field.Index.NO)); 

처럼 위의 지정된 구조에 대한 루씬 문서를 만들 수 있습니다 그러나 루씬의 문제는 당신이 나중에 기존의 필드 구조를 새로운 필드를 추가하거나 수정할 수 없습니다입니다. 따라서 문서를 삭제하고 scracth에서 새 문서를 만들어야합니다.

더 나은 방법은 모든 필드를 알 수없는 필드에 대해 색인 가능하게 만드는 것입니다.

0

아니요, 아닙니다. 전체 텍스트 검색 엔진의 후보이며, "nosql"과는 관계가 없습니다.

전체 텍스트 검색 엔진은 종종 SQL 또는 일부 변형을 사용합니다. 예 : 스핑크스 또는 Lucene. 당신은 또한 마이크로 소프트의 소프트웨어를 사용할 수도 있습니다 (그러나 당신의 요구 사항을 만족 시킬지는 모르겠지만 확인해야합니다).

관련 문제