분산 환경에서 실행되지 않으면 HBase가 의미가 있습니까?
문제
데이터 색인을 구축하고 있는데, 이는 양식에 많은 트리플렛을 저장하는 것을 수반합니다. (document, term, weight)
. 나는 최대 수백만 개의 줄을 저장할 것입니다. 현재 MySQL에서 간단한 테이블 로이 작업을 수행하고 있습니다. 문서와 용어 식별자를 다른 테이블에 대한 외래 키보다 문자열 값으로 저장하고 있습니다. 소프트웨어를 다시 작성하고 데이터를 저장하는 더 나은 방법을 찾고 있습니다.
HBase의 작동 방식을 살펴보면 스키마에 잘 맞는 것 같습니다. 트리플렛을 많이 저장하는 대신 매핑 할 수 있습니다. document
에게 {term => weight}
.
나는 단일 노드에서 이것을하고있다, 그래서 나는 분산 노드 등에 관심이 없다. 나는 그것이 작동하기 때문에 mySQL을 고수해야합니까, 아니면 hbase를 시도하는 것이 현명해야합니까? Lucene은 전체 텍스트 인덱싱에 사용합니다 (이는 내가하는 일과 유사합니다). 내 질문은 실제로 단일 HBase 노드가 단일 MySQL 노드와 어떻게 비교됩니까? 나는 Scala에서 왔는데 직접 Java API가 JDBC와 MySQL 구문 분석 등에 가장자리가있을 수 있습니까?
나의 주요 관심사는 이전에 병목 현상 이었기 때문에 삽입 속도입니다. 처리 후 MySQL 내에서 더 잘 수행되는 계산을 수행해야하기 때문에 데이터를 MySQL에 다시 넣을 것입니다.
나는 둘 다 프로토 타이핑을 시도 할 것이지만, 커뮤니티가 이것에 대한 귀중한 통찰력을 줄 수 있다고 확신합니다.
해결책
작업에 적합한 도구를 사용하십시오.
산 (원자력, 일관성, 격리, 내구성)과 달리 많은 항 -RDBMS 또는 기본 시스템 (기본적으로 사용 가능한 소프트 상태, 결국 일관성)이 있습니다. 여기 그리고 여기.
나는 기존의 RDBMS를 사용했는데 클로브/블롭을 저장할 수는 있지만 이러한 개체를 검색하기 위해 특별히 맞춤형 인덱스가 내장되어 있지 않습니다.
문서를 삽입 할 때 대부분의 작업 (발견 된 각 튜플의 가중 주파수를 계산)을 수행하려고합니다.
각 검색 후 각 (DocumentID, SearchWord) 쌍의 유용성을 채점하는 작업을 수행 할 수도 있습니다.
그렇게하면 매번 더 나은 검색을 제공 할 수 있습니다.
또한 각 검색 및 가중 점수에 대한 점수 또는 가중치를 다른 검색과 유사하게 저장하려고합니다.
일부 검색은 다른 검색보다 더 일반적이며 사용자가 일반적인 검색을 수행한다는 의미이지만 검색 쿼리를 올바르게 표현하지 않을 수 있습니다.
문서를 삽입하면 검색 가중치 인덱스를 약간 변경해야합니다.
내가 그것에 대해 더 많이 생각할수록 솔루션이 더 복잡해집니다. 먼저 좋은 디자인으로 시작해야합니다. 디자인이 예상되는 요인이 많을수록 결과가 더 좋아집니다.
다른 팁
Mapreduce는 튜플을 생성하는 좋은 방법처럼 보입니다. Scala 작업을 JAR 파일에 넣을 수 있다면 (이전에 Scala를 사용하지 않았고 JVM N00B이기 때문에 확실하지 않음), 그것을 보내고 그것을 실행하기 위해 약간의 래퍼를 작성하는 것은 단순히 문제가 될 것입니다. 지도에서 클러스터를 줄입니다.
완료된 후 튜플을 저장하는 것은 다음과 같은 문서 기반 데이터베이스를 고려할 수도 있습니다. MongoDB 튜플을 저장하는 경우.
일반적으로 텍스트로 더 통계적으로 무언가를하고있는 것처럼 들립니다 ... 단순히 루센이나 솔르를 사용하여 자신의 글을 쓰는 대신하고있는 일을하는 것을 고려해 보셨습니까?