Reasons why the Firebird database is a viable option for your next project. In the open-source world, much has been made about the need for a full-featured, robust and reliable database that can handle substantial loads and yet be able to play well with such open-source tools as Perl and PHP. The two main contenders are PostgreSQL and MySQL, but a new arrival in this arena is the Firebird RDBMS.
It will be installed. ๐
All these centralized, server program-based databases are nice, but what about embedded databases that run within an application process? It would be nice if I could write an end-user application that takes advantage of the structured storage capabilities of a relational database without making grandma or uncle fred download, install and set up Firebird/MySQL/PostgreSQL first. I hoped that Firebird might be able to work this way.
Berkeley DB, though free and portable, isn’t quite what I had in mind since it merely stores unstructured key/value pairs. MS Access is more like it, but isn’t portable. Does anyone know of such software?
You *can* embed mysql inside your process.
I don’t know about the licensing issues if you distribute a product though…
Yes, SQLite. Public domain and fully embeddable.
Firebird (or rather, in it’s previous existence as Interbase) has such a small footprint that for years it was distributed by Borland with Delphi. I never used it back then, so I can’t comment on it more than to note that.
The Firebird developers have continued this by producing an embeddable version of Firebird. This is really not my area, but it looks like this is just available for Windows: http://www.ibphoenix.com/downloads/Firebird_v15.107_ReleaseNotes.pd…
If you want to know more, go over to http://groups.yahoo.com, and ask for more details in the firebird-support group. There are knowledgeable and helpful people there.
Alternatively you can also take a look at SQLite – it is embeddable and the author is quite explicit about which SQL features it does and does not support: http://www.hwaci.com/sw/sqlite/omitted.html (Don’t be put off by the name – it is actually quite full-featured – though not as full-featured as Firebird).
It’s great to see Firebird getting so much attention lately.
Hi Eugenia
First, let me say I really like this site ๐ I come here almost daily. So thanks for all the great stuff.
Just a minor correction – Firebird has been around for over 3 years, since Borland open-sourced Interbase and then decided to close-source it again. This led the people behind Firebird fork-off the Interbase code. (Here’s the timeline: http://firebird.sourceforge.net/index.php?op=history&id=firebird)
And Interbase has been around for about 20 years (http://www.cvalde.net/IbRoadmap.htm)
And for those who think it is just another RDBMS, here are some accounts of what it has to offer:
http://community.borland.com/article/0,1410,27007,00.html
Here’s the skinny from the Firebird side (by Ann Harrison, one of the original developers, and who can still be found giving advice and insight in the firebird-support group):
http://www.ibphoenix.com/a494.htm
IBPhoenix have recently commissioned Interbase’s original architect to produce a 64-bit version of Firebird which (I believe) is expected to be completed in the first half of this year. Now, that should be some awesome database on a G5 ๐ I only wish I had a G5 to see what kind of throughput one could get from that combination.
Hope those links give people some additional useful information ๐
You mean 1.5 final,
1.03 has been out for a long time.
Version 1.5 is much better, even at RC 8 is suitable for production use.
What makes Firebird useless for me is its limited index sizes (maximum: 256 bytes). What if you wanted to index a few ASCII text fields whose combined char-lengths were greater than 256 characters? Worse yet is if you’re using something a bit modern – such as Unicode – in which case your field sizes are further reduced. Sure, you can get around this by splitting your text fields, but then that just makes everything messy. I’ll wait until v2 – hopefully this ancient restriction has been fixed by then.
Thank you Serge, Owen and Bernard. I will look into SQLite and how I can embed Firebird. Very cool.
Yes, index size limit is one of the most annoying things in FB. Single-column index is at 252 bytes max and multi-column index is even shorter at about 200 bytes.
This _will_ be fixed in FB2, but the problem is when are we going to see it. The FB 1.5 timeline is taking sooo long, and FB2 is not even alpha/pre-alpha yet. Meanwhile, other databases such as Postgres are leaving FB in the dust, so to speak.
Anonymoous and Steven –
Can you give us some idea how other (open-source and/or commercial) rdbms compare with regard to things like the size limits on index entries? I Googled this, but couldn’t find anything that looked like it might compare them. What other things do you find limit the usefulness of Firebird?
I can imagine that there are things in Firebird that might need modernising – although with 20 years of history behind it in the form of InterBase, I’m sure many of the most needed requests have been included.
Clearly the involvement of Jim Starkey in re-architecting Firebird for the 64-bit version (including the best features of the classic server and the superserver) means that it is undergoing modernisation. But it is good to know what kinds of limitations people find in Firebird so that these limitations be suggested as enhancements.
Also, since Firebird has received so little publicity compared to MySQL and PostgreSQL (to my knowledge, three of the biggest comparisions of open source databases in the last 18 months did not even include any reference to Firebird), it should be no surprise that development has been slower than you might hope. The more people know about it, and the more users and developers the project has, the faster it will develop.
But in defense of the Firebird developers, they have transformed the code from c to c++, and included many bug fixes and enhancements along the way.
yes it can be embedded as .dll on windows and .so under linux and it’s *free* as mozilla is (mpl derived license – ipl)
some great examples are on firebird-java list (windows&linux)
http://groups.yahoo.com/group/Firebird-Java/
well is fixed in the 2.0 unstable tree it seems
in jrd/btr.h
#define MAX_KEY_LIMIT (dbb->dbb_page_size / 4)
in the 1.5 it was
#define MAX_KEY 256 /* 256 isn’t big enough for a key either */
ps :
i changed from 256 to 1024 and compile it now to see what is happening with (fb 1.5 rc8)
response from ann harrison
(aharrison at ibphoenix.com)
At 11:03 AM 2/8/2004, marius popa wrote:
> marius popa wrote:
>
> #define MAX_KEY_LIMIT (dbb->dbb_page_size / 4)
Right. The problem could not be solved in 1.5 because it is an ODS change. V2 has a new index format that include larger keys and a more complex bucket format to reduce the cost of bucket
scans.
Regards,
Ann
http://www.ibphoenix.com
We have answers.
“And for those who think it is just another RDBMS, here are some accounts of what it has to offer:
http://community.borland.com/article/0,1410,27007,00.html“
The main point of this link seems to be that Firebird/Interbase is a multi-versioning DBMS. So are most DBMSes these days. PostgreSQL has had MVCC (Multi-version Concurrency Control) for years, and MySQL’s InnoDB table handler does MVCC. And Oracle has used MVCC for quite some time as well.
It is great that Oracle and MySQL have recently caught up with some of the features which InterBase has had for 20 years. If MySQL and Oracle would change their licensing so that they were truly free as Firebird is, then I would think that Firebird had some serious competition ๐
There is no point in getting into a protracted discussion of which is the best database – it all depends on your needs, your abilities, and your bank balance. I have heard that the major commercial vendors stipulate that any published comparison of the performance of their database is verboten – I find it hard to credit that they would expect us to trust gigabytes of precious data to them under those conditions.
After reviewing all the alternative open source databases, for me, the benefits of Firebird far exceeded all the others _for my needs_. Firebird offers me feature-completeness, simplicity, multi-platform availability, and freedom.
Some time after I made that decision, I got free licenses to DB2 (IBM gave them to me with some other software I use). One look at the installation notes and readmes told me that this was going to be a lot of trouble just to install.
If I get to the point where my data-processing needs dictate DB2 or Oracle, I will have to make sure that I can employ a certified professional to take care of it. I worked with Oracle myself for several years, and there is just so much that can go wrong with an Oracle installation.
I have a question for the Firebird users out there: How thorough is its MVCC support? For example, in PostgreSQL, I can start a transaction and issue ALTER TABLE and DROP TABLE commands. Only that transaction will see those changes – other transactions continue normally. I know MySQL can’t do this. Can Firebird?
I’m not trying to start a flamewar, just asking out of curiosity.
I use the SQLite libraries via the DBD::SQLite perl module in a project of mine (http://www.dixongroup.net/hatchet/). It works quite well for portability and such, but the fact that it’s typeless seriously limits its usefulness. Everything is treated as a string, so even simple date comparisons _aren’t_.
The author will tell you this is a feature, but I’ve yet to meet a DBA who prefers moving logic out of the database and into their glue code.
-fp
I have no idea why you mention MySQL and FireBird/PostgreSQL. They’re all available as open source, but that’s where the similarity ends. MySQL is a joke compared to the features those other databases have and what a relational database programmer/designer would take for granted.
MySQL has its uses, but it’s an entirely different beast as the others.