2009-12-06 27 views
6

Tôi đã viết một ứng dụng Windows trên máy tính để bàn hoạt động với Sqlite rất độc đáo. Đó là một ứng dụng người dùng duy nhất và cơ sở dữ liệu nằm ngay trên máy nơi ứng dụng chạy.Giải pháp cơ sở dữ liệu đa người dùng đơn giản

Tuy nhiên, ứng dụng đã phát triển và giờ đây nhiều người dùng có thể chạy ứng dụng và kết nối với một cơ sở dữ liệu được chia sẻ.

Tôi muốn chỉ có thể chia sẻ tệp sqlite trên ổ đĩa mạng, nhưng điều đó rõ ràng sẽ dẫn đến dữ liệu bị hỏng trừ khi ai đó có bất kỳ ý tưởng nào.

Tôi đoán tôi có thể yêu cầu cài đặt máy chủ cơ sở dữ liệu, nhưng giấy phép MySQL thương mại không có ý nghĩa, PostgreSQL đủ khác để tôi phải viết lại rất nhiều ứng dụng của mình. Tôi đã không làm việc với Firebird ở tất cả, vì vậy tôi không chắc chắn nếu đó là một giải pháp tốt hay không.

Có bất kỳ máy chủ cơ sở dữ liệu Sqlite nào có thể được cài đặt để xử lý các giao dịch đến trên tệp cơ sở dữ liệu Sqlite không?

Nếu tôi yêu cầu khách hàng tự tải xuống và cài đặt MySQL, tôi có phải có giấy phép thương mại không?

Bất kỳ đề xuất hoặc hướng nào sẽ là tuyệt vời, cảm ơn bạn.

+0

lý do tại sao chuyển sang postgresql khiến bạn viết lại rất nhiều ứng dụng của mình, nhưng mysql sẽ không? – warren

+0

Chỉ dựa trên thử nghiệm trong quá khứ với Postgresql. Nhưng việc xem xét khác có lẽ sẽ không bị tổn thương, nó đã được một vài năm. –

+3

Một bản cập nhật, tôi đã thử Postgresql một lần nữa, và tôi thực sự có rất nhiều thành công với nó. –

Trả lời

5

gì về SQL Server Express, miễn phí và nên dừng lại bạn cần phải viết lại hầu hết các mã của bạn,

+0

Để giảm cử tri, xin vui lòng để lại bình luận tại sao đây không phải là câu trả lời hay? – Rippo

2

Tôi không biết lý do tại sao bạn cho rằng các tập tin dữ liệu sẽ bị hỏng nếu bạn đặt nó trên một ổ đĩa mạng và cho phép nhiều lần truy cập ứng dụng của bạn cùng một lúc. Nếu bạn chủ yếu đọc, bạn sẽ ổn thôi. Nếu bạn viết rất nhiều, có thể bạn sẽ bị ảnh hưởng bởi vì chỉ một thể hiện có thể viết cùng một lúc. (Xem http://www.sqlite.org/faq.html)

Nếu bạn viết nhiều, có thể bạn sẽ cần cài đặt máy chủ độc lập - bạn đã xem MS SQL Server Express chưa? Nên dễ dàng và đơn giản để có được và chạy.

+0

Diễn đàn Sqlite nói rằng nếu nó trên hệ thống tệp FNS, nó sẽ không thể khóa. Có đúng là Windows chia sẻ chúng tôi SMB và không phải NFS vì vậy sẽ không có khả năng là một vấn đề? Tôi lo ngại về việc phải viết mã xung quanh mọi tìm kiếm để lặp lại nếu tệp bị khóa. –

8

Bạn có thể sử dụng các tập tin Sqlite trên một ổ đĩa mạng chia sẻ như bạn mô tả, tùy thuộc vào hệ thống tập tin cơ bản:

http://www.sqlite.org/faq.html#q5

Nhiều quá trình có thể có cùng một cơ sở dữ liệu mở tại cùng một lúc. Nhiều quy trình có thể thực hiện đồng thời SELECT. Nhưng chỉ một quy trình mới có thể thực hiện thay đổi đối với cơ sở dữ liệu vào bất kỳ thời điểm nào, tuy nhiên, .

SQLite sử dụng khóa trình đọc/ghi cho kiểm soát quyền truy cập vào cơ sở dữ liệu. (Theo Win95/98/ME này không hỗ trợ ổ khóa đọc/ghi, một mô phỏng xác suất được sử dụng để thay thế.) Nhưng sử dụng thận trọng: cơ chế khóa này có thể không hoạt động chính xác nếu các tập tin cơ sở dữ liệu được giữ trên một NFS hệ thống tập tin. Điều này là do khóa fcntl() bị hỏng trên nhiều triển khai NFS. Bạn nên tránh đặt các tệp cơ sở dữ liệu SQLite trên NFS nếu nhiều quá trình có thể thử truy cập tệp cùng một lúc.Trên Windows, Tài liệu của Microsoft cho biết rằng khóa có thể không hoạt động trong hệ thống tệp FAT nếu bạn không chạy daemon Share.exe. Những người có số lượng kinh nghiệm với Windows cho tôi biết rằng việc khóa tệp của các tệp mạng là rất lỗi và không đáng tin cậy. Nếu điều họ nói là đúng, hãy chia sẻ cơ sở dữ liệu SQLite giữa hai hoặc nhiều Máy Windows có thể gây ra các sự cố không mong muốn .

+1

Trang [Khi sử dụng] (http://www.sqlite.org/whentouse.html) khuyên chống lại việc sử dụng SQLite trực tiếp qua mạng khi có nhiều người dùng/khách hàng. Nó nói rằng "Một nguyên tắc tốt là bạn nên tránh sử dụng SQLite trong các tình huống mà cùng một cơ sở dữ liệu sẽ được truy cập đồng thời từ nhiều máy tính qua hệ thống tập tin mạng." –

4

Tôi nghĩ rằng Firebird có thể là một lựa chọn rất tốt

  • Nó hoàn toàn miễn phí
  • phiên bản nhúng tồn tại
+0

Tôi đã dành rất nhiều thời gian cố gắng để có được Firebird để làm việc với các ứng dụng của tôi, nhưng cuối cùng chạy vào các lỗi với mỗi bước. Tôi phải đi đến FAQ khoảng 5 lần để xem tại sao tôi không thể tạo bảng vì mỗi khi tôi thay đổi thứ gì đó từ faq, tôi sẽ gặp lỗi mới, phải quay lại, thay đổi thứ gì đó, sau đó là lỗi khác. Chủ yếu là dựa trên quyền. Tôi không nghĩ rằng tôi muốn trải qua những thất vọng này với mọi khách hàng cố gắng cài đặt nó. –

+0

Tôi không biết vấn đề của bạn với sự cho phép nhưng nếu bạn cần một số công cụ GUI tốt, bạn có thể sử dụng www.upscene.com hoặc www.ibexpert.com (cả hai đều có phiên bản miễn phí) –

0

Quá muộn tôi biết, nhưng không ai trong những ngày này cần phải có một nhu cầu để viết một ứng dụng mà không có một khuôn khổ cung cấp trừu tượng cơ sở dữ liệu.

Cá nhân tôi sử dụng Web2py là một khung dựa trên nền python. Theo mặc định nó sử dụng SQLite đó là tuyệt vời cho các ứng dụng người dùng duy nhất trên máy tính để bàn địa phương hoặc các ứng dụng vừa và nhỏ trên mạng nội bộ mà chủ yếu là các hoạt động đọc. Tuy nhiên nếu tôi quyết định tăng phạm vi sử dụng ứng dụng, tôi sẽ chỉ cần thay đổi chuỗi kết nối trong phương thức cơ sở dữ liệu để sử dụng cơ sở dữ liệu khác. Web2py hoặc bất kỳ giá trị khung công tác khác sử dụng sẽ chỉ viết lại các câu lệnh SQL để đáp ứng các yêu cầu mới.

0

sử dụng mã này trên chuỗi kết nối của bạn sau khi nhiều người dùng có thể chèn, xóa, chọn e.t.c. trong cơ sở dữ liệu của bạn mà không có vấn đề.

SQLiteConnection con = new SQLiteConnection ("Data Source = D: \ yourdatabase.db; Count Changes = off; Chế độ Journal = off; Pooling = true; Kích thước bộ nhớ cache = 10000; Kích thước trang = 4096; Đồng bộ = off") ;

0

Nếu tôi yêu cầu khách hàng tự tải xuống và cài đặt MySQL, tôi có phải có giấy phép thương mại không?

số

Giá trị của một giấy phép thương mại MySQL là nó cho phép bạn phân phối MySQL tiêu chuẩn hoặc một MySQL sửa đổi dưới dạng nhị phân mà không các oblihation cũng để phân phối mã nguồn. Nó cũng cho phép bạn truy cập để hỗ trợ.

Tuy nhiên, nếu người dùng tự nhận được MySQL từ Oracle, GPL không có nghĩa vụ nào đối với bạn để cung cấp cho họ mã nguồn MySQL. Họ có thể lấy nó từ Oracle. Thật vậy, Oracle có nghĩa vụ cung cấp nó, miễn là chúng phân phối theo GPL.

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