문제

나는 빠르고,믿을 수 있고,메모리 효율적인 키-값 데이터베이스를 리눅스.내 키에 대 128 바이트를,그리고 최대값이 사이즈 수 128K 또는 256K.데이터베이스 하부 시스템을 사용하지 않아야 이상에 대해 1MB RAM.총 데이터베이스 크기는 20G(!), 하지만 작은 임의의 일부 데이터에 액세스할 수니다.필요한 경우,이동할 수 있습니다 일부 데이터의 얼룩의 데이터베이스(일반 파일)를 사용하기 때문에 크기가 아래로 2GB 최대.데이터베이스 생존 시스템 충돌 손실없이 최근 수정하지 않은 데이터입니다.나는에 대해 100 번 더 읽어보다 씁니다.그것은 플러스 사용할 수 있는 블록 장치(없이 파일시스템)로 저장합니다.나는 필요 없는 클라이언트-서버 기능을 수 있습니다.I 인터페이스 플러그인이 필요(그러나 나는 그들을 구현할 수 있지 않은 경우 사용할 수 있습니다).

는 솔루션을 고려해야 하며,어느 당신은 권장합니까?

후보자를 알고 나의 수 있는 일:

  • 도쿄 캐비닛 (Python bindings 가 pytc, 도를 참조하십시오 pytc 예제 코드, 지원,해시,B+나무,트랜잭션 로그 파일이 더 크기의 양동열은 고정 데이터베이스에서 생성 시간;작가해야 한 파일을 닫고 다른 사람에게 기회를;의 많은 작은 기록을 가진 파일을 열에 대한 그들 각각은 매우 느린;폭군 서버에 도움을 줄 수 있는 수 많은 작은 씁니다; 속도 사이의 비교 캐비닛 도쿄,도쿄,폭군 Berkeley DB)
  • VSDB (도 안전에 NFS 지 않고,잠금;것에 대한 장벽입니까?;업데이트는 매우 느리지만,느린에서 cdb;마지막 버전에서 2003)
  • BerkeleyDB (제공합 복구;제공하는 트랜잭션이 bsddb Python 모듈이 제공하는 바인딩)
  • Samba 의 TDB (트랜잭션 및 인터페이스 플러그인,사용자가 어떤 손상 경험, 때때로 mmap()s 전체 파일 repack 작업 때로는 복식 파일의 크기,생성 신비한 실패는 경우에 데이터베이스 보다 큰 2G(도에서는 64-bit 시스템),클러스터 구현(동물)도 사용할 수 있;파일이 너무 큰 성장을 많이 후 수정,파일이 너무 느리 후의 많은 해시 경;는 방법은 기본적으로 제공되지 않을 다시 파일매우 빠르게 업데이트 평행으로 잠그는 개인 해쉬 버킷)
  • aodbm (추가만 그렇게 살아나 시스템이 중단으로 인터페이스 플러그인)
  • hamsterdb (Python bindings)
  • C-리 (성숙하고,다재다능한 상업적인 솔루션과 높은 성능을 갖는 무료 버전과 기능 제한)
  • 이전 TDB (2001)
  • bitcask (log-구축된,작성에 얼랑)
  • 다른 다양한 DBM 구현을(등 GDBM,NDBM,QDBM,Perl 의 SDBM 또는 루비스;아마 그들은하지 않는 적절한 복구)

나는 사용하지 않을 것이:

  • MemcacheDB (클라이언트-서버 사용하 BereleleyDB 로드)
  • cdb (필요를 재생하는 데이터베이스 전체에 각각 작성)
  • http://www.wildsparx.com/apbcdb/ (저도)
  • Redis (전체를 유지합 데이터베이스에 메모리)
  • SQLite (그것은 매우 느리지 않고 주기적인 진공 청소기,자동 완성 보에에서 위치 바에서 Firefox3.0 지만 3.1 버전 이상의 sqlite 허용 auto_vacuuming;주의:작은 작성한 거래 속도가 매우 느려질 수 있습;주의:는 경우 바쁜스 프로세스가 일을 많이 거래,다른 프로세스에 굶주리고 그들은 결코 얻을 잠금)
  • MongoDB (너무 무거운 무게,취급으로 값을 객체와 내부 구조)
  • Firebird (SQL-based RDBMS,너무 무거운 무게)

FYI,a 최신 기사에 대한 키-값 데이터베이스 에서 리눅스 매거진입니다.

FYI,는 이전 소프트웨어 목록

FYI,a 속도 비교 MemcacheDB,Redis 및 도쿄 장 폭군

관련 질문에서 유래:

도움이 되었습니까?

해결책

나는 행운이 함께 도쿄 캐비닛/pytc 솔루션입니다.그것은 매우 빠르(비용을 보류할 모듈을 사용하여 도구에서 나의 구현),을 모두 읽고 쓰기를 위한(하지만 내가 너무 더 읽).문제한 스파르탄에 대한 문서의 인터페이스 플러그인을 하지만,거기에 충분히 예제 코드 주변하는 작업을 수행하는 방법을 알아내는 무엇을 할 필요가 있습니다.또한,도쿄,캐비닛 아주 쉬운 설치(로는 python bindings),필요로하지 않는 서버(당신이 언급) 고 보다 적극적으로 지원 (안정되어 있지만 더 이상에서 활발한 개발).당신은 파일을 열 수 있습니다 읽기 전용 모드에서 수 있도록 동시에 액세스하거나 읽기/쓰기 모드,예방 다른 프로세스에 액세스하는 데이터베이스입니다.

내가 찾던에서 다양한 옵션을 통해 여름,조언을 얻었음이 있었다:시도하고 다른 옵션과 최고의 작품을 위해 당신입니다.그것은 좋은 것이 있다면 간단하게"최고의"옵션이 있지만,모든 사람을 찾고는 약간 다른 기능과자 다른 trade-offs.당신이 알고있다.

(그는 말했다,그것은 다른 사용자에게 유용한 경우 공유 어떤 결국 당신을 위해 최선을 노력하고,당신이 선택한 이유는 솔루션을 통해 다른 사람!)

다른 팁

LMDB 가장 메모리 효율적인 데이터베이스 주변 http://symas.com/mdb/inmem/

또한 입증된 가장 신뢰할 수 있는 완전한 충돌-증거입니다.http://wisdom.cs.wisc.edu/workshops/spring-14/talks/Thanu.pdf

의 사람들은 당신이 언급했듯이,캐비닛 도쿄는 문서화된 손상 문제 https://www.google.com/search?q=cfengine+tokyo+cabinet+corruption

BerkeleyDB 또는 문서화된 손상 문제,로가 Bitcask.(고 bitcask 는 메모리에만 DB 어쨌든,무용에 대한 1MB RAM 요구 사항입니다.)

LMDB 은 또한 잘 지원하는 파이썬에서 부부와 함께,다른 바인딩이 가능합니다.https://github.com/dw/py-lmdb/ https://github.com/tspurway/pymdb-lightning

면책 조항-나는 저자의 LMDB.그러나 이러한 문서화 된 사실:LMDB 가장 작은,가장 효율적이고,가장 신뢰할 수 있는 키/값 저장소는 세계에서 아무것이 온 어디서나 가깝습니다.

cdb 처리할 수 있는 모든 데이터베이스를 4 기가바이트,그것을 너무 작 20GB 중요합니다.

Riak 리눅스에서 실행할 수 있습을 동적으로 노드 추가

는 방법에 대한 파이썬 3.0 의 dbm.ndbm?

다른 제안이 TDB (일부 Samba 한)를 이용하실 수 있습니다내가 사용했던 그것을 통해 tdb 모듈,그러나 내가 말할 수 없다 나는 테스트는 그것의 신뢰성에 충돌;프로젝트가에 그것을 사용하지 않는 그러한 요건,그리고 나는 찾을 수 없는 관련 문서입니다.

는 방법에 대해 SQLite?

나는 사용 bsddb.hashlib()Python,그것은 일을 매우 좋습니다.

djbko cdb, 고 있는 속성을 언급합니다.

내 쿼리를 위한 크로스-플랫폼 ISAM 스타일 데이터베이스 (유사),나도에 대한 제안을 포함 버전 Firebird입심.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top