2011-04-08 4 views
1

저는 RS232 데이터를 받아 들여 모든 데이터를 비교적 빠른 속도 (수백 초당 수백)로 내장 데이터베이스에 저장하는 C# WPF 응용 프로그램을 만들고 있습니다. 데이터베이스에서 데이터베이스 임베디드 데이터베이스와 고속 다중 쓰기

  • 플롯에 데이터를

    1. 걸릴 RS232 데이터 저장 : 응용 프로그램은 동시에 두 가지 작업을 수행합니다.

    내 응용 프로그램에 내장 데이터베이스가 필요하고 단일 사용자 응용 프로그램이므로 SQLite를 고려합니다. 그러나 데이터 저장 및 그래프 작성 (현재 데이터를 저장하고 어제의 데이터를 플로팅 할 수 있음)에는 데이터베이스에 대한 동시 읽기 및 쓰기가 필요합니다. 나는 SQLite가 하나의 쿼리에서 락업 (lock up)을 취하고 동시에 여러 쿼리를 처리 할 수 ​​없다고 들었다. 그게 사실이야? 그렇다면 다른 내장 데이터베이스가 다중 쓰기를 지원하는 것은 무엇입니까?

  • 답변

    2

    좋아, 몇 가지.

    우선 SQLite는 작성자가 열정적이지 않더라도 스레드로부터 안전합니다. 여기에 대해 읽어보십시오 : http://www.sqlite.org/faq.html#q6.

    두 번째로, "빠름"은 초당 수백 개의 삽입이라고 언급했습니다. SQLite는 트랜잭션에서 모든 것을 랩핑하면 초당 30,000 개의 삽입을 쉽게 얻을 수 있습니다. 나는 이것이 정말로 당신의 질문 이었기 때문에가 아니라, 이것을 알고있는 것이 당신의 결정을 도울 수 있기 때문에 (그것이 "빠른"것으로 간주되는 것을 재정의하기 때문에) 더 많은 것을 말합니다.

    +0

    SQLite에서는 다중 쓰기가 불가능합니다. 그러나 "스레드 안전"은 적어도 하나의 쓰기 및 다중 읽기를 가질 수 있음을 의미합니까? – KMC

    +0

    @KMC - Sqlite는 트랜잭션을 지원하므로 동시성 제어 수단입니다 (스레드 안전성의 의미라고 생각됩니다). Sqlite는 스레드간에 연결을 공유하지 않는 한 스레드로부터 안전합니다. 또한 Sqlite는 데이터베이스 수준 잠금 만 지원하므로 연결 수에 관계없이 타이머에서 한 명의 작성자로 제한됩니다. –

    0

    RavenDB를 확인하십시오. http://www.ravendb.net/ 일부 테스트를 실행하고 요구 사항을 처리하는지 확인하는 것이 매우 쉽습니다.

    3

    Berkeley DB은 비 블로킹 쓰기가 있으며 속도가 빠르다는 평판을 얻고 있습니다.

    매우 흥미롭게도 it can be used as a drop in replacement for SQLite. SQLite는 버전 3 API에 기록

    응용 프로그램은 버클리 DB SQLite는 라이브러리에 다시 연결하여, 어떤 코드 변경 오라클 버클리 DB를 사용하여 전환 할 수 있습니다. 두 제품의 응용 프로그램 수준의 동작은 동일하지만 버클리 DB 의 고급 기능은 SQLite는 응용 프로그램 성능, 동시성, 확장 성, 및 신뢰성을 향상 제공합니다.

    꽤 괜찮은 것 같습니다.

    +0

    드롭 인 대체에 대해 알지 못했습니다. 감사! –

    관련 문제