2009-05-03 40 views
16

Tôi đang phát triển một ứng dụng cần lưu trữ dữ liệu với nhiều lần viết và đọc khi yêu cầu tìm kiếm nhanh dữ liệu (cần phải lập chỉ mục) và cũng có thể tuần tự hóa và lưu dữ liệu.Lựa chọn thay thế SQLite cho C++

Hiện tại tôi đang suy nghĩ về việc sử dụng SQLite, công việc này được thực hiện, nhưng tôi mở cho các lựa chọn thay thế. Cú pháp của SQLite thực sự không vừa với mã C++ (ví dụ tôi buộc phải truy cập vào các kết quả theo các số chỉ mục cột thay vì các tên cột, vv).

+2

Chỉ số cột vs tên phải làm gì với việc "phù hợp với mã C++"? – jalf

+0

Có thể trùng lặp: [Trình bao bọc OO C++ tốt cho sqlite là gì] (http://stackoverflow.com/questions/120295/what-is-a-good-oo-c-wrapper-for-sqlite) – iammilind

Trả lời

21

Ở lại với SQLite nhưng tìm một thư viện C++ tốt cho việc này.

StackOverflow question này sẽ giúp bạn ...

+15

liên kết bị hỏng . – ggg

+0

Trong trường hợp bất kỳ ai quan tâm đến câu hỏi Stack Overflow gốc được liên kết, [đây là bản sao của archive.org] (https://web.archive.org/web/20131105070032/http://stackoverflow.com/questions/120295/ what-is-a-good-oo-c-wrapper-cho-sqlite). – evotopid

6

Có vẻ như cơ sở dữ liệu là lựa chọn thực sự duy nhất cho bạn. Tuy nhiên, nếu bạn chọn SQLite hoặc MySql hoặc Postgres không thực sự quan trọng trong cột chỉ mục cột.

Có thể điều bạn thực sự muốn là trừu tượng hóa cơ sở dữ liệu tốt hơn. Bạn có thể muốn thử Poco, nó có một tuyệt vời: http://pocoproject.org/

1

tôi có thể đề nghị bạn nên lấy một danh sách các wrapper APIs niêm yết trên trang web Sqlite? Có rất nhiều thứ cho nhiều ngôn ngữ, bao gồm C++. Sqlite Plus trông đặc biệt tốt. POCO, mà 'thường bất cẩn' được đề cập, có vẻ tốt.

1

Nếu cú ​​pháp SQL không quan trọng đối với bạn, tôi khuyên bạn nên MetaKit - Đó là một cách tiếp cận hơi khác nhưng nó khá mạnh mẽ và cá nhân tôi biết nhiều hơn một vài dự án thương mại sử dụng thành công, ngay cả trên các hệ thống nhúng.

This Tutoria l khá hữu ích để bắt đầu.

+0

Hmmm ... phát triển dường như đã chùn bước trên nó một vài năm trở lại. –

+0

Đúng, nhưng nó vẫn được sử dụng nhiều, ổn định và hữu ích. Giấy phép nguồn mở là dựa trên MIT để nó cho phép bạn sửa đổi và sửa đổi nguồn đóng. – jdkoftinoff

8

Tôi cho rằng sự phụ thuộc được thêm vào thư viện trình bao bọc không đáng giá để phải đối phó với các chi phí của phụ thuộc thêm đó. Bạn không muốn bị mắc kẹt gỡ rối các libs bao bọc này khi tài liệu hướng dẫn cho chúng có thể không rõ ràng. SQLLite là ràng buộc để được ổn định hơn và có tài liệu tốt hơn và do đó một phụ thuộc đáng tin cậy hơn.

Tôi sẽ xử lý sqllite hoặc tự bọc nó theo một cách thông minh dựa trên ứng dụng cuối của bạn.

+5

Điều này nghe có vẻ hợp lý, nhưng gợi ý rằng tất cả các thư viện trình bao bọc sẽ tự động dự phòng. Nếu bảo trì là cần thiết trong tương lai, bạn có thể thấy bạn có ít việc phải làm hơn nếu bạn đang sử dụng thư viện cộng đồng được chấp nhận rộng rãi (nguồn mở). – joeytwiddle

0

Thay vì dẫn xuất sql, bạn có thể nghĩ đến việc sử dụng thư viện IR chỉ mục đảo ngược như Lucene (hoặc một trong nhiều dòng vô tính ở đó). Tôi biết Lucene là Java, nhưng bạn có thể viết một thư viện C++ được quản lý để tương tác với Lecene.Net.

Theo như tốc độ, tôi rất hài lòng với hiệu suất của Lucene cho lần đọc của nó. Nó không được tối ưu hóa cho việc viết của nó, nhưng nó vẫn khá tốt, miễn là bạn không cố gắng xây dựng một chỉ mục của hàng triệu "tài liệu".

0

Nếu bạn không làm việc trên Windows, bạn có thể nhìn vào Nội các Tokyo. Dường như khá tốt. Tôi đang chờ đợi cho các cổng Win32, vì vậy tôi không thể nói nhiều về nó khác hơn là hiệu suất có vẻ ấn tượng.

http://anyall.org/blog/2009/04/performance-comparison-keyvalue-stores-for-language-model-counts/

Đây không phải là dẫn xuất SQL. Đó là một cửa hàng dựa trên b-tree/băm thẳng. Điều này rất được hoan nghênh, theo ý kiến ​​của tôi. Thư viện cạnh tranh duy nhất mà tôi biết là Berkeley DB, có ít hơn giấy phép mong muốn.

4

Berkeley DB aka SleepyCat. Nếu bạn tìm kiếm các lưu trữ, có một bài báo của Mike Olsen nói về những bất lợi chính của SQL trong bất kỳ dự án nào.Có một bài viết tiếp theo khác trong năm vừa qua cho thấy rằng SQL đang trên đường ra bởi vì các lớp ORM đang nhận được tốt hơn rất nhiều.

+2

Xem ra giấy phép, nó nghiêm ngặt hơn GPLv2: http://www.opensource.org/licenses/sleepycat.php: "Việc phân phối lại dưới mọi hình thức phải kèm theo thông tin về cách lấy nguồn hoàn chỉnh mã cho phần mềm DB và bất kỳ phần mềm đi kèm nào sử dụng phần mềm DB . " – jdkoftinoff

+0

theo wikipedia giấy phép sleepycat được OSI phê duyệt. Nó đủ tốt cho tôi. – Richard

+2

Yup, miễn là bạn không muốn tạo một chương trình nguồn đóng thương mại sử dụng nó ... – jdkoftinoff

1

Tôi đồng ý, không có nghĩa là SQLite không tương thích với việc lập chỉ mục C++ hoặc cột Có rất nhiều trình bao bọc C++ SQLite khuyến khích truy cập các cột theo tên. SQLite++ chỉ là một trong nhiều.

+0

Nhưng SQLite ++ là một thư viện trả tiền và bạn không muốn chi tiền vào việc mua một thư viện bao bọc. –

+0

@PriteshAcharya, tôi đã không xem xét chi tiết, nhưng nó nói, "SQLite ++ bây giờ là miễn phí để sử dụng mã nguồn, không có giới hạn." –

2

Nếu bạn yêu cầu tôi ở lại với SQLite và "làm điều đó tự của bạn" - gói nó là khá đơn giản tôi đã bao bọc khác nhau trên SQLite bản thân mình. Tại sao? Bởi vì API của nó thân thiện hơn bất kỳ cơ sở dữ liệu nào khác có liên quan và bạn không cần tốn nhiều công sức. Với một thư viện bao bọc, bạn sẽ chỉ thêm nhiều lần mở rộng và quan trọng nhất là hầu hết các trình bao bọc không đặc biệt dành riêng để phục vụ các cơ sở dữ liệu nhúng. Tôi luôn lặp lại điều đó với cơ sở dữ liệu nhúng đúng cách rất khác với cách tiếp cận tối ưu cho máy chủ cơ sở dữ liệu ...