Oracle Unveils New Open Source BerkeleyDB Release
Mark Brunelli writes to tell us that Oracle has released the newest version of the open source Oracle BerkeleyDB Java Edition. From the article: "The new release of the Java embeddable database is the third to come out in three years and the first new version to come out of Sleepycat Software since Oracle purchased the open source stalwart back in February. Rex Wang, Oracle's vice president of embedded systems and a former vice president of marketing at Sleepycat, said the latest release lets Java developers take advantage of a new Persistence application programming interface (API) that provides greater flexibility and new performance optimizations that enable applications to run faster."
Rex Wang? Wasn't she one of the supervillains in one of the Austin Powers movies?
I know that many developers, especially on embedded or hand-held systems, are starting to use SQLite these days instead of BDB. SQLite is small enough, and efficient enough, to be used suitably in such environments. It offers SQL support, which BDB does not. And its library-based architecture is a real plus in such environments. The fact that it's public domain makes it even more appealing.
SQLite is even starting to take over from MySQL for many smaller websites. The overhead (both in terms of system resources and administration) can't be justified when using a server-based system, especially when SQLite does the job just fine.
What we may even see is MySQL squeezed out of the market. I know many database developers who are starting to use PostgreSQL for their higher-end databases, and SQLite for the lower-end. MySQL could be considered the best contender for mid-range DBs, but SQLite and PostgreSQL keep converging, thus pushing MySQL out to a point of irrelevance. Of course, there has been a decade and more of development using MySQL, so for legacy reasons alone it will continue to be used for ages.
I'll have to see if they've finally added support for partial record retrivals. It used to be that this feature was only in the native code edition of BDB. It ended up being a showstopper for the Java version last time I tried to use it.
Javascript + Nintendo DSi = DSiCade
Since TFA seems to be slashdotted, here's an alternate. I'm assuming that version 3.0 (May 17th) is the new version.
r keleydb-je-ga.html/
http://www.oracle.com/corporate/press/2006_may/be
I thought it was funny that the article mentions "high-performance" and "Java" in the same sentence. IMHO, it's inappropriate to be writing "high-performance" applications in an interpreted language like Java. For the same amount of keystrokes, I can do it right the first time and write it in C and not have to worry about performance issues.
Actually, a subset of Java is quite heavily used in many mobile devices. This isn't the 1980s any more. A typical cell phone today is just as powerful as a decent PC from 1999 or 2000. And just like many other applications, data storage is a very real requirement.
While you are correct regarding BDB being superior for storing certain types of data (eg. objects), in the past BDB has often been used in embedded applications to store relational data. It isn't well suited to such uses, without additional layers on top, as you mention.
However, SQLite offers the small footprint of BDB, along with the efficient single-file persistence, with the additional SQL support. Those who have been using BDB for a rather bastardized method of storing relational data can now instead use a fairly full-featured SQL implementation. Best of all, their overhead is barely increased, if not outright decreased.
BDB has its role, there's no doubt about that. But its necessity is being eaten away rapidly by competitors (eg. SQLite) and vastly improved embedded/mobile hardware.
Is there a wrapper for Postgres that lets me install PG+wrapper instead of BerkeleyDB for supporting apps that depend on BDB? Asterisk uses BDB, OpenLDAP uses BDB, and more. I'd rather wrap my existing Postgres (on which other apps depend) than refactor and port all the other apps off BDB. Even if I later port them from the BDB wrapper, it will be easier and more productive along the way.
If there's no such wrapper, is there a way to use this BDB source to strip out everything below the BDB interfaces, install mapping to PG interfaces, then integrate with PG?
--
make install -not war
Java classes get compiled to native code with machine-specific optimizations at runtime. If you had done any research on the subject, you would find that Java out-performs other languages at times. Java is fast. This argument is over, so please can it.
Join Tor today!
Microsoft's new Groove product uses BDB. Pretty fun pointing out to them that MSFT depends on Oracle for scalable database work.
Booooorrringgg
We've been using the C version of BDB (via Guy Decoux's Ruby extension) as a data store for indi; it's been working pretty well. It doesn't take up much space, either, so it's easy to fit it on a flash drive.
Of course, on the backend we use PostgreSQL. Rails + PostgreSQL is good stuff.
The Army reading list
Your comments are all valid, except I disagree with the last one. I find myself pleasantly surprised by the performance of Eclipse and applications based on its platform (in terms such as interface responsiveness). The other point I would make in contrary to yours is that Java is, these days at least, primarily intended for server applications. Most code written on the Java platform is never touched by the end user, but rather agents acting on behalf of the user. Hence interface response is rarely a concern.
Join Tor today!
Its optimizer is not the smartest in the world, but we use Derby and if you get your indexes right, you can usually get very good performance on very large datasets.
Ok, if you don't mind slow (and not free software) how about "totally not appropriate for long lived processes"?
Show me a scheduler built in java and it will have 'hiccups' occasional. And require restarts after a while becuase of mysterious GC issues.
The reason that you can get away with saying that "Java is usually as fast as C," or any other language compiled to native code, is that USUALLY, speed doesn't matter. Anything waiting on user input -- or that only does a few small calculations -- doesn't need a speed boost. The change isn't noticeable.
For a high-traffic database, speed is paramount. I wouldn't choose Java.
Any of the other good acid compliant DBMSes, say postgre, derby, firebird et al are distributed under a license which allows them to be redistributed for no fee in comercial products. This doesn't, MySQL doesnt so i won't use them. Eugh, Money.
...remember with Databases, unless it's all in memory, your big bottleneck is disk performance.
I am NaN
Interesting! The new BDB Java release does attempt to store objects directly. That's quite an advance in comparison to the awkward API of BDB 2.x.
However BerkeleyDB JE is still years behind db4o. The querying functionality of BDB is very rudimentary. It requires manual selection of indexes to be used, not really sophisiticated in comparison to db4o's Query-By-Example and Native Query concepts.
It would be interesting to see BerkeleyDB and db4o race head to head in the Poleposition benchmark.
But why is OpenOffice dog-ass slow?
I'm not sure about the rest, but I can address this one.
StarOffice 5.x was the series where the people at Sun started to think, "hmmm, this could actually be something someday" - and they started showing it to a very small group of people. Those people said, "Well, that's not bad, but it crashes all the time."
StarOffice 6.x was more stable, and is when Sun spawned OpenOffice.org. It reached a slightly larger audience who said, "Well, it's stable now, but it's missing a whole bunch of important features."
OpenOffice 1.0 and 1.1 started to address the feature issues, and reached a larger audience. Those people said, "Well, it's getting there, but it doesn't handle Microsoft formats perfectly, and the user interface doesn't feel like MS Office."
OpenOffice 2.0 fixed that, and is reaching a much larger audience. Now people are saying, "This is getting pretty good, but it's not fast enough - for example, it chews a lot of CPU doing large spreadsheets."
Care to guess what version 3.0 will be improving upon? I don't actually know - haven't followed their developer notes or anything, but I'd place a big fat wager on performance.
It's the natural evolution of software. Sometimes the evolution happens behind closed doors, as is most common with proprietary software, but it almost always follows that evolutionary process. Core Stability, Major Features, Minor Features and User Friendliness, Performance. You can almost set your watch by it.
Stop-Prism.org: Opt Out of Surveillance
Indexing/partitioning/remodelling the brain-dead table design can lead to significant performance gains
http://revj.sourceforge.net
My company has been using Berkeley DB for quite some time and I must say that is indeed quite a good product. Sleepycat has great support and the tool itself is very stable. The java version is fairly new and doesn't have the features of the C version but works great as object storage.
However it is not very user friendly and also not very programmer friendly. It doesn't have any single protocol like JDBC for access because you can literally program it to do anything. Also the documentation is very sparse and there is only one GUI admin tool as opposed to about a jillion ones for SQL DB's. However BDBXMLAdmin from the java.net project is quite good and though its not quite a phpmysql competitor it is adequate https://bdbxmladmin.dev.java.net/. What it makes up in difficulty it absolutely makes up for in terms of raw speed and portability it just can't be beat and we have benchmarked it vs. HSQL and MySQL running in ISAM mode.
It looks like the oracle acquisition may actually be paying off as they were generally very slow in new releases and I don't know about the size of their development team but I would have thought they would have produced more for the time and the apparent caliber of the management team (bunch of Phd's that worked on the initial product). I hope that oracle can bring some muscle and polish to their product and maybe this will be one that they don't kill off with their questionable ideals.
Here's to hoping that BDB gets the recognition it deserves and I predict that with the right involvement it will be a strong player in the embedded applicaitons space, something oracle could never hope to compete in without a tool like this.
We are currently building a product for embedded devices in the RFID space and some of the things that need to be done can't be done with any other embedded db period. It really is so great to work with and handles Java and XML storage quite well.
------- Long time Addict, First Time Poster
Software Defined RFID - The Rifidi Emulator
Rex Wang, that's the name I would pick for my own personal super hero!
Beauty is in the beholder of the eye.
If I compile the Java code with GCJ, then I shouldn't need a JVM. If someone would get around to building a processor-in-memory hardware Java implementation, you'd have a Java Physical Machine and again would not require a virtual machine. "Need", then, is a little strong. It would be more correct to say that - as of right now - most Java applications will indeed be run in a virtual machine, and require the components within that machine, but they are only run virtually because that is how it is traditionally done.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
That is mostly what BerkeleyDB is.
As for handheld scaners, I put tiny tcl http://tinytcl.sourceforge.net/ on mine. I am sure calling ndbm would be easy. execpt the handheld was a DOS_5. I don't have the time to go find all the junk like 'C' compilers for that. The next version of the scanned will run Linux and all will be well.
If Oracle solves this problem, I'll be a very happy camper...
In Soviet Washington the swamp drains you.