2010-02-18 24 views
5

Tôi có một ứng dụng WCF hiện đang sử dụng lưu trữ tệp dựa trên XML để lưu trữ dữ liệu được sử dụng để tạo báo cáo. Bên cạnh đó, các quyết định xử lý này được thực hiện dựa trên thông tin được lưu trữ trong các tệp XML này.Bất kỳ cân nhắc nào trước khi nhảy vào SQLite?

Tôi hiện đang đạt khối lượng khoảng 30 000 tệp văn bản. Điều này là cực kỳ thuế, và các ứng dụng tại thời điểm đến một dừng nghiền.

Tôi luôn muốn xóa bỏ XML DAL có lợi cho RDBMS, nhưng các nhà quản lý dự án sẽ không cho phép nó. Nhưng họ sẽ sẵn sàng xem xét một giải pháp không có máy chủ ví dụ như SQLLite. Tôi thực sự bị cám dỗ để chỉ đi sâu vào và bắt đầu sử dụng nó như là một DAL thay thế (Data Access Layer).

Tôi sẽ không cần nhiều hơn 20 bảng trong toàn bộ giải pháp và tôi hy vọng sẽ nhận được không quá 20 000 - 100 000 giao dịch mỗi ngày, tuy nhiên điều này là cực, khối lượng thực sẽ nhỏ hơn trong hầu hết các trường hợp.

Cập nhật

Tôi không mong đợi rất nhiều kết nối đồng thời, khi tôi nói giao dịch, tôi về cơ bản có nghĩa là 1 hoặc 2 khách hàng mà thực hiện cuộc gọi và thực hiện chống lại các cơ sở dữ liệu theo thứ tự. Đôi khi có thể có khả năng khách hàng bên ngoài thực hiện cuộc gọi nhanh đến DB. Nhưng phần lớn các kết nối DB sẽ được thực hiện bởi dịch vụ WCF của tôi, đó là nhiệm vụ được lập lịch biểu kết thúc, không phục vụ 100 người trong toàn bộ tổ chức.

Một điểm tốt nữa là tôi chỉ cần giữ lại dữ liệu trong 90 ngày, vì vậy DB không nên phát triển quá lớn.

Mối quan tâm chính của tôi là:

Độ tin cậy là SQLLite? Nếu DB File bị hỏng, tôi sẽ mất tất cả dữ liệu xử lý. DB dễ sao lưu như thế nào? Nó sẽ xử lý khối lượng của tôi? Và cuối cùng nhà cung cấp dịch vụ .net hoạt động tốt như thế nào (nằm ở đây: http://sourceforge.net/projects/sqlite-dotnet2/).

Nếu bạn có bất kỳ kinh nghiệm nào với SQLLite, vui lòng đăng kinh nghiệm của bạn để tôi có thể đưa ra quyết định sáng suốt để chuyển đổi hay không.

Cảm ơn trước ...

Trả lời

1

Với khối lượng giao dịch của bạn tôi muốn nói sự thật rằng DB chính nó là một tập tin khối duy nhất với hệ thống tập tin chỉ khóa sẵn có thể là một vấn đề.

Không có khóa dựa trên hàng nào theo như tôi biết.

+0

Hãy để tôi thuật lại câu hỏi của mình. –

+0

Phải, sqlite không xử lý nhiều người dùng cố gắng truy cập đồng thời, nhưng miễn là nó đơn giản là một kho dữ liệu nguyên khối được sử dụng bởi một ứng dụng tại một thời điểm, nó hoạt động rất tốt. – Karl

+0

@Karl, nó xử lý truy cập đồng thời bởi các quy trình khác nhau, thậm chí từ các hệ thống khác nhau và nó hỗ trợ các giao dịch, đó là cách tốt nhất để quản lý khóa. Nó tuân thủ ACID. Tuy nhiên, vì toàn bộ cơ sở dữ liệu được chứa trong một tệp và nó khóa ở mức tệp, trình đọc chặn trên đang chờ viết và viết khối cho đến khi đọc xong. –

3

Bạn có thể xem xét Sql Compact Edition của Microsoft. Nó giống như sqlite, về mặt cơ sở dữ liệu nhúng một tệp, nhưng có tích hợp tốt hơn với khung .net
SQLite có vẻ đáng tin cậy, và thậm chí với SQLite, tôi không mong nhận được nhiều hỗ trợ trong trường hợp một cơ sở dữ liệu bị hỏng.

+0

Sqlite hoạt động tốt, nhưng tôi chắc chắn đã gặp khó khăn khi chơi nó với giao diện đối tượng dữ liệu hoạt động trực quan, miễn là bạn đang ở trong cửa sổ, có lẽ MS Sql Compact là một lựa chọn tốt hơn. – Karl

5

SQLite đáng tin cậy như hệ điều hành và phần cứng của bạn.

Tỷ lệ giao dịch của nó tương tự như máy chủ SQL và thường nhanh hơn vì tất cả đều đang trong quá trình.

Nhà cung cấp NET ADO hoạt động tốt.

Để sao lưu DB, hãy ngừng dịch vụ và sao chép tệp. Nếu tập tin tạp chí là hiện nay sao chép nó quá.

EDIT: SQLite sử dụng UTF-8 theo mặc định, vì vậy với nhà cung cấp ADO-NET, bạn sẽ có thể tránh mất dấu (chỉ miễn là bạn làm theo XML điển hình trong quy tắc chuỗi).

+0

Nó cũng an toàn để sao lưu cơ sở dữ liệu khi bạn có một giao dịch độc quyền mà không dừng dịch vụ - giao dịch độc quyền của bạn đảm bảo không có gì khác là chạm vào db. Ngoài ra phiên bản 3.6.11 đã thêm một API sao lưu trực tiếp trực tiếp trong công cụ lõi (Tôi không biết liệu trình bao bọc .NET có cho thấy điều này chưa nhưng nếu không dễ dàng thêm). –

1

Tôi đã sử dụng SQLite với nhà cung cấp .Net không có vấn đề gì trong môi trường độc lập, ngoại trừ một mối quan tâm: dấu trọng âm, không hiển thị chính xác. Bản sao lưu khá đơn giản: cơ sở dữ liệu SQLite là một tệp văn bản thuần túy. Đơn giản chỉ cần sao chép nó.

+0

Điểm nhấn là gì? Chưa nghe về họ bao giờ. –

+0

"acentos" trong tiếng Tây Ban Nha, tôi đoán: một cái gì đó như thế này – Apocatastasis

+0

Ok, sau đó tôi sẽ có một vấn đề bởi vì giải pháp tôi đang sử dụng là dành cho khách hàng Séc mà không sử dụng một bộ ký tự tiếng Anh. –

1

Tôi sử dụng Sqlite để lưu trữ dữ liệu cấu hình XML và không gặp vấn đề gì với nó. Tôi sử dụng nhà cung cấp System.Data.Sqlite: http://sqlite.phxsoftware.com/. Nó vững chắc và có một diễn đàn hỗ trợ tốt. Nó cũng bao gồm một nhà cung cấp LINQ. Nó cũng tích hợp với VS 2008 để bạn có thể sử dụng Server Explorer để truy vấn các bảng. Các ví dụ và tài liệu cũng cho thấy cách sử dụng các lệnh và các giao dịch được tham số hóa để tăng hiệu suất.

Ứng cử viên phát hành cho LinqPad hiện hỗ trợ Sqlite: http://www.linqpad.net/Beta.aspx.

Sqlite lưu trữ mọi thứ trong một tệp, có thể được sao lưu giống như bất kỳ tệp nhị phân nào khác.

Sqlite chỉ hỗ trợ khóa cấp tệp, nhưng không nên trình bày một vấn đề về hiệu suất vì nó không có vẻ như bạn sẽ có một số lượng lớn các giao dịch đồng thời.

Unicode không phải là vấn đề. Liên kết này trong diễn đàn giải quyết một khu vực nơi ai đó đang cố gắng đọc các ký tự unicode với một tiện ích không tương thích http://sqlite.phxsoftware.com/forums/t/954.aspx.

Trang web này cho biết cách thực hiện so sánh UTF8 không phân biệt chữ hoa chữ thường bằng cách sử dụng System.Data.Sqlite qua trình thu thập tùy chỉnh, với các ký tự tiếng Nga làm ví dụ: http://www.codeproject.com/KB/database/SQLiteUTF8CIComparison.aspx.

Các vấn đề liên quan