2010-01-20 34 views
5

Tôi muốn hỏi những người có kinh nghiệm về Firebird và IBPP (đặc biệt là sau này). Tôi tìm thấy rất nhiều bài viết tích cực về Firebird nhưng tôi đang gặp một vấn đề để quyết định về IBPP. Giao diện chính nó là sạch sẽ và đơn giản nhưng có vẻ như dự án không có nhiều hoạt động đang diễn ra (có thể vì nó rất ổn định).Trải nghiệm giao diện IBPP cho cơ sở dữ liệu Firebird

  • Bạn có đề xuất IBPP cho môi trường sản xuất không?
  • Chủ đề có an toàn không?
  • Bất kỳ lỗi nào đã biết?

Cảm ơn.

Trả lời

3

Ngoài các điểm Milan đề cập:

  • Hiện nay không có cách nào để sử dụng nhiều hơn một thư viện client khi kết nối với cơ sở dữ liệu khác nhau, hoặc thậm chí để xác định các khách hàng thư viện sẽ được sử dụng. Có một chuỗi các vị trí thư viện máy khách được mã hóa nhất định được thăm dò và chuỗi đầu tiên được tìm thấy sẽ được sử dụng cho tất cả các kết nối tất cả. Một phiên bản IBPP thay đổi điều này đã được gợi ý trong một thời gian rất dài, nhưng vẫn chưa đến. SVN trunk chứa một số mã để giải quyết vấn đề này, nhưng tôi muốn nói đó là chất lượng alpha nhiều nhất.
    Và tất cả điều này chỉ đúng cho Windows, giống như trên tất cả các nền tảng khác, thư viện máy khách Firebird không được tải vào thời gian chạy.

  • Thư viện không an toàn cho chuỗi. Điều đó không quan trọng đối với hầu hết các phần, vì bạn nên để cho mỗi thread có kết nối riêng của nó, giao dịch và các loại đối tượng khác anyway. Nhưng IBPP sử dụng việc thực hiện con trỏ thông minh của riêng nó, điều này hoàn toàn không an toàn ngoại trừ cũng như an toàn cho luồng.Tuy nhiên, miễn là bạn khởi tạo thư viện từ chuỗi chính (trước khi bất kỳ luồng nào khác được tạo) và tạo và tiêu diệt các đối tượng IBPP trong cùng một luồng (vì vậy hoàn toàn không chia sẻ các đối tượng với các luồng khác!) Bằng cách sử dụng IBPP trong nhiều luồng khỏe.

  • Nếu bạn có thể sống với các điểm trên (tất nhiên, điều đó hoàn toàn không quan trọng đối với bạn) chắc chắn đã sẵn sàng để sử dụng sản xuất. Bạn luôn có thể thay đổi những thứ bạn gặp phải, như chúng tôi đã làm cho FlameRobin.

+1

Điểm đầu tiên của mghie: Bạn hoàn toàn đúng, nhưng đi vào mã và thay đổi đường dẫn của thư viện khách hàng thực sự là khá dễ dàng (file: "_ibpp.cpp", phần: GDS :: Call()). Vì thư viện máy khách cho cơ sở dữ liệu nhúng "fbembed.dll" cũng cho phép các kết nối đến một cơ sở dữ liệu từ xa (fbclient.dll có vẻ là một tập con của fbembed.dll), bạn có thể không cần phải thay đổi thư viện máy khách. –

+1

@Ergodicity: Đúng, nhưng sau đó nó vẫn là một thư viện khách duy nhất cho tất cả các kết nối. Câu trả lời của tôi là liên quan đến việc sử dụng nhiều thư viện máy khách cùng một lúc, đó là một tính năng phổ biến của các công cụ máy khách Firebird như FlameRobin (mà vẫn không có nó). Điều đó là không thể sau đó (hơn 5 năm trước), và AFAIK tình hình không thực sự khác nhau ngày hôm nay. Điều này tự nó có thể thú vị trong bối cảnh của câu hỏi, lại "dự án không có nhiều hoạt động đang diễn ra" ... – mghie

+0

@mghie bạn sẽ nói, tốt nhất nên sử dụng [fork ibpp được sử dụng trong Flamerobin] (https : //github.com/mariuz/flamerobin/tree/master/src/ibpp) (ở trạng thái hiện tại)? – Wolf

1

Tôi thực sự không thể kể từ kinh nghiệm vì tôi chưa từng sử dụng IBPP.
Nhưng dường như nó được sử dụng bởi dự án flamerobin vì vậy tôi tin tưởng nó là 'đủ ổn định'.

+0

nhưng không phải phiên bản không thay đổi từ SourceForge https://sourceforge.net/projects/ibpp/files/ - FR cũng "đã chuyển" từ SF sang GitHub https://github.com/mariuz/flamerobin/tree/master/src/ibpp – Wolf

3

IBPP rất ổn định và tôi muốn giới thiệu nó cho sản xuất. Tức là, nếu bạn định sử dụng nó cho các ứng dụng thông thường.

Nếu bạn muốn xây dựng công cụ quản trị hoặc thứ gì đó tương tự, hãy chuẩn bị đi vào bên trong và làm bẩn tay vì một số tính năng mới hơn (nghĩa là công cụ Firebird 2.5 không phải là SQL nhưng cải tiến API không được hỗ trợ. Ví dụ: nó thiếu một lớp để lộ ra API theo dõi mới.

Dù sao, hãy tiếp tục và tôi sử dụng nó. Tôi có một loạt các ứng dụng IBPP trong sản xuất trong nhiều năm, và, như Douglas đã viết, FlameRobin đang sử dụng IBPP và nó hoạt động hoàn hảo (ít nhất là xa như lớp DB có liên quan).

Điều duy nhất cần lưu ý là các trường NUMERIC, được lưu trữ nội bộ dưới dạng số nguyên + tỷ lệ trong Firebird. IBPP cho thấy chúng thông qua C/C++ "double", nhưng cũng thông qua số nguyên 16/32/64bit. Vì vậy, hãy rất cẩn thận khi lấy các giá trị như vậy, vì bạn sẽ không nhận được cảnh báo. Ví dụ, nếu bạn có trường DECIMAL (18,2) với giá trị 254,00 trong đó, và bạn tình cờ đọc nó vào một số nguyên, bạn sẽ nhận được 25400, chứ không phải 254. Hãy chắc chắn rằng bạn đọc những thứ đó dưới dạng gấp đôi hoặc tự mở rộng sau này. Điều này rất hữu ích vì bạn có thể chuyển đổi an toàn 25400 thành chuỗi và sau đó thêm dấu thập phân, vì vậy bạn không bị mất chính xác với gấp đôi (tất cả phụ thuộc vào loại ứng dụng của bạn và số đếm nào, tất nhiên).

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