2010-01-17 5 views
21

내 Windows 데스크톱 응용 프로그램에 일종의 내장 된 키 - 값 (또는 문서) 저장소를 사용하거나 구현하려고합니다. 다양한 유형의 데이터를 저장할 수 있기를 원하며 (물론 GPS 트랙이 한 가지 예일 수 있습니다.) 물론이 데이터를 쿼리 할 수 ​​있어야합니다. 데이터의 양은 동시에 메모리에 모두로드 될 수 없습니다.임베디드 비 관계형 (nosql) 데이터 저장소

키 값 저장소의 저장소 엔진으로 sqlite를 사용하는 것에 대해 생각하고 있지만 y-serial과 비슷하지만 .NET으로 작성했습니다. 또한 FriendFeed's usage of MySQL to store schema-less data에 대해 읽었습니다. 이는 비 관계형 데이터에 RDBMS를 사용하는 방법에 대한 좋은 지침입니다. sqlite는 단순성, 이식성 및 라이브러리 크기 때문에 좋은 옵션 인 것 같습니다.

제 질문은 임베디드 비 관계형 상점에 대한 다른 옵션이 있는지 여부입니다. 배포 할 필요가 없으며 트랜잭션을 지원할 필요도 없지만 .NET에서 액세스 할 수 있어야하며 다운로드 크기가 작아야합니다.

업데이트 : sqlite를 포함 된 키 - 값 저장소 라이브러리 인 Berkeley DB와 비교하는 SQLite as a Key-Value Database이라는 제목의 기사를 발견했습니다.

답변

5

개인적으로 NHibernate (및 Fluent NHibernate)를 사용하여 SQLite로 이동합니다. NHibernate는 클래스에 대해 자동으로 데이터베이스 스키마를 생성 할 수 있으므로, 유지하고자하는 클래스를 지정하기 만하면됩니다. Fluent NHibernate에서는 매우 쉽습니다. 또한 특정 개체를 검색 할 수 있으며 모든 데이터를 메모리에로드 할 필요가 없습니다.

+0

하지만 그는 스키마가없는 저장소를 원했습니다 .... –

+0

Astor가 맞습니다. 관계형 모델을 피하고 싶습니다. 먼저 데이터베이스 스키마를 준비 할 필요없이 실제로 모든 종류의 데이터를 저장할 수 있기를 원합니다. 또한 데이터 구조가 나중에 변경되면 엄격한 관계형 모델을 사용하는 것이 문제가 될 수 있습니다. 상점의 기존 데이터에 대한 SQL 변경 스크립트를 작성해야합니다. –

+1

그가 찾고있는 것을 알고 있지만 스키마 생성과 같은 NHibernate와 같은 도구는 관계형 측면을 거의 완전히 숨 깁니다. 스키마를 정의 할 필요는 없으며 클래스에 대한 매핑 만 (Fluent NHibernate로 정말 간단합니다) 클래스가 변경되면 모든 지속성 전략에서 일종의 업데이트를 수행해야합니다. –

19

Windows에는 내장 된 비 관계형 저장소가 내장되어 있습니다. ESENT라고하며 Active Directory 및 Windows 데스크톱 검색을 비롯한 여러 Windows 응용 프로그램에서 사용됩니다.

http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx

는 .NET 액세스 당신이 코드 플렉스에 ManagedEsent 층을 사용할 수 원하는 경우

.

http://managedesent.codeplex.com/

그 프로젝트는 IDictionary 인터페이스를 구현하는 키 - 값 저장소를 구현하는 PersistentDictionary 클래스를 가지고 있지만, 데이터베이스에 의해 백업됩니다.

+0

@ 로리온, 나는 ESENT를 보았으며 처음에는 매우 흥분했습니다. 유일한 문제는 Windows 전용 (Mono + Linux/Mac)입니다. –

2

문제에 KISS 원리를 적용하면 파일을 사용하는 것이 좋습니다.

as는 키입니다. 파일 내용이 값입니다. Windows 폴더가 색인입니다.

간단하고, 빠르고 효율적이며 융통성이 있으며 (바보가 지성이 낮음을 제공함) SQLite는과

창고 파이썬 객체

"직렬화 + 지속성 : 몇 줄의 코드에서 압축 : y_serial의 네 종류의 언급에 대한

+0

값을 저장하기 위해 파일을 사용하는 것이 단순한 값 (예 : 단일 정수)에 대해 조금 모자라는 느낌이 들지만 멋진 접근 방식입니다. –

+0

질문 정렬은 저장되는 내용이 큰 것 (문서/메모리에로드되는 너무 많은 데이터)을 조용히 유지할 수 있음을 의미합니다. 파일 접근 방식의 장점 중 하나는 무료 스트림 처리 클래스 세트를 얻는 것입니다. 예를 들어 임의의 nMB blob에 데이터를 분할하여 저장하는 것보다 훨씬 큰 데이터 청크를 처리 할 때 매우 유용합니다. 데이터 베이스. –

+2

참. 파일 시스템의 물리적 한계는 어떻습니까? 레코드 수가 100,000 개를 넘을 때 어떻게 이러한 저장소가 작동합니까? 또한 : "너무 많은 데이터"에 대해 이야기했을 때, 나는 전체 _ 데이타베이스를 의미했습니다. 객체 트리 직렬화 및 유사와 같은 해답을 피하기 위해 이것을 언급했습니다. –

1

감사합니다 ... 더 정확하게, 그것은 파이썬 모듈이다 Python 객체에 SQLite로 주석을 작성한 다음 나중에 SQL을 사용하지 않고 키워드별로 시간순으로 검색 할 수 있습니다. 스키마가없는 데이터를 저장하는 가장 유용한 "표준"모듈."내 경험에

http://yserial.sourceforge.net

은, SQLite는 프로젝트의 대부분 (PostgreSQL의 버클리 DB를 포함한) 대부분의 데이터베이스보다 더 빠르고 신뢰할 수있는 선택을 - 물론, 그것은 서버 데몬을 필요로하지 않는다 .

yserial 구현하기가 매우 쉽게 (그리고 훨씬 빠르게보다 접근 ;-) "파일 이름이 키/파일 내용입니다 값이"입니다

+0

네, 저는 y-serial의 접근법을 정말 좋아합니다. 특히 sqlite를 사용하기 때문에 그렇습니다. 좋은 일을 계속하십시오! 어쩌면 내가 다른 프로젝트에서 약간의 시간을 얻을 때 C#에서 비슷한 작업을 시도 할 것이다. –

2

두 개의 열이있는 간단한 sqlite가 데이터베이스를 만들 수 있습니다

==documents== 
id|data 

데이터는 json 데이터입니다.

또한 일 것 키 테이블을 만들 수 있습니다 빠른 조회에 대한 키 이름과 키 값에 색인 것

==keys== 
keyname|keyvalue|id 

.

단일 데이터베이스 파일은 컬렉션 일 수 있으며 여러 컬렉션에 대해 여러 개의 db 파일을 만들 수 있습니다.

당신은 RavenDB에서 봐 DB-> 모음 -> 문서

+0

그냥 참고 : 당신은 템플릿을 sqlite db 파일을 만들고 복사 할 때마다 새 컬렉션을 만들어야한다. . 누구든지이 문제를 처리하고 오픈 소스를 처리 할 PHP 설치 프로그램을 만들고 싶다면 알려주십시오. 나는 그것이 좋을 것이라고 생각하지만 결코 그것을 스스로 만들지는 않았다. – RobKohr

+0

당신의 제안은 y-serial이하는 일의 방향에 있습니다. 당신은 그것을 보았다? http://yperial.sourceforge.net/ –

+0

아니요,하지만 PHP 솔루션을 직접 찾고 있습니다. – RobKohr

10

의 MongoDB의 계층 구조에 맞게 "DBS"로 폴더를 사용할 수 있습니다. 그것은 내장 할 수있는 것처럼 보이는 스키마이며, 웹 사이트에서 .NET

와 함께 작동 :

  • 확장 가능한 인프라 : 까마귀는 기존의 최고 입증하고 확장 가능한 인프라
  • 간단한 Windows 구성을 기반으로 : Raven은 서비스 나 IIS7 웹 사이트 중 하나 인 Windows에서 설치 및 실행하기가 간단합니다.
  • 트랜잭션 : Raven 지원 System.Transaction with ACID transactions. 당신이 그것을에 데이터를 입력하는 경우, 해당 데이터가있을 것입니다
  • 지도/축소/쉽게지도를 정의 Linq에이
  • .NET 클라이언트 API 쿼리로 인덱스를 감소 : 까마귀는 완전한 기능을 .NET 클라이언트 API와 함께 제공되는 구현을 작업 단위보다
  • 편안하고 많은 : 레이븐이 편안하고 API
2

이 오래된 질문의 주위에 내장되어 있습니다,하지만 난 사람이 거기에 실수를 한단다 경우 답변을 추가 할 거라고 생각했다. 우리 회사는 방금 Nxdb라는 .NET 플랫폼 용 오픈 소스 임베디드 XML 데이터베이스를 발표했습니다. 그것은 Apache 2.0 라이센스하에 있으며 수년간 내부적으로 개발되어 사용되었습니다. 기본적으로 IKVM (Cross-Compiled) 버전의 BaseX (환상적인 Java XML 데이터베이스)와 임베디드 유스 케이스 및 .NET 환경을위한 추가 기능에 대한 바인딩입니다. 프로젝트 페이지는 여기에 있습니다 : https://dracorp.assembla.com/spaces/nxdb

XML은 저장하려는 내용이 텍스트에 직렬화 가능한 한 복잡한 계층 트리를 저장할 수 있다는 점에서이 유형의 데이터 저장소에 적합합니다. 실제로 데이터베이스에 직접 액세스하면 "XML"을 건드릴 필요조차 없습니다. 강력하고 완벽한 쿼리 언어 인 XQuery를 사용하여 쿼리 할 수도 있습니다.

1

시도해 볼 수 있습니다. https://github.com/mdsoftware/mData. 작고, 무료이며 아주 드문 경우.Lisp와 유사한 데이터 쿼리 언어, 표현식 컴파일러, 고성능 바이너리 직렬화가 모두 포함되어 있습니다.

관련 문제