Pazar, Aralık 31, 2006

H2 Database Engine

Bir önceki blogumda Thomas Mueller'in Hypersonic SQL olarak temellerini attığı ve daha sonra açık kaynak topluluğu tarafından HSQLDB olarak devam ettirilen java tabanlı bir veritabanından bahsetmiştim.

Bu sefer Thomas Mueller'in HSQLDB'deki tecrübelerini kullanarak belli alanlarda MySql ile bile yarışabileceği H2 adını verdiği yine java tabanlı bir veritabanından bahsedeceğim ama öncelikle Mueller'in H2 ve HSQLDB hakkındaki düşüncelerine bir göz atalım:
H2 1.0 Database by Hypersonic Creator is Out
It makes sense to use H2 whenever you need an embedded database in your Java application. Or if you need a database for regression testing, or to learn SQL or the JDBC API. Or if you need a high-performance database.

There are some architecural problems in HSQLDB that are hard to fix or work around: The opening / closing a database in HSQLDB can be very slow if the database is big, because the whole database is always backed up. HSQLDB doesn't offer any transaction isolation. Some operations on HSQLDB are limited by the memory (result set size, transaction size, BLOB / CLOB size). The current query optimizer of HSQLDB is really bad in my opinion. A lot of the higher level features are not supported (updatable result sets, encrypted database, data compression, computed columns, linear index, hash index, multi-dimensional index, linked table). In my view the source code of H2 is cleaner than that of HSQLDB. But the jar file of H2 is a bit bigger than the one of HSQLDB (1 MB jar file size instead of 600 KB). And for some very simple operations HSQLDB is currently a little bit faster.


Mueller, yukarıda bahsettiği HSQLDB'deki eksikleri de gözönünde bulundurarak aşağıdaki özelliklerde yeni bir open-source veritabanı geliştirmiş. Gerçek liste çok uzun ama ben önemli gördüklerimi burada listeliyorum:

H2 Feature List
Main Features
# Very fast database engine
# Free, with source code
# Written in Java
# Supports standard SQL, JDBC API
# Embedded and Server mode, Clustering support
# Strong security features
# Experimental native version (GCJ) and ODBC drivers

Additional Features
# Disk based or in-memory databases and tables, read-only database support, temporary tables
# Transaction support (serializable transaction isolation), 2-phase-commit
# Multiple connections, table level locking
# Cost based optimizer, using a genetic algorithm for complex queries, zero-administration
# Scrollable and updatable result set support, large result set, external result sorting, functions can return a result set
# Encrypted database (AES or XTEA), SHA-256 password encryption, encryption functions, SSL
# User password authenticated uses SHA-256 and salt
# User passwords are never transmitted in plain text over the network (even when using insecure connections)
# Small footprint (smaller than 1 MB), low memory requirements
# Uses a small number of database files, binary and text storage formats, graceful handling of low disk space situations
# Well tested (high code coverage, randomized stress tests)


SQL Support

# Compatibility modes for HSQLDB, MySQL and PostgreSQL
# Support for multiple schemas, information schema
# Referential integrity / foreign key constraints with cascade, check constraints
# Inner and outer joins, subqueries, read only views and inline views
# Triggers and Java functions / stored procedures
# Many built-in functions, including XML and lossless data compression
# Wide range of data types including large objects (BLOB/CLOB)
# Sequence and autoincrement columns, computed columns (can be used for function based indexes)
# ORDER BY, GROUP BY, HAVING, UNION, LIMIT, TOP
# Collation support, Users, Roles

H2'nin HSQLDB ile karşılaştırıldığında ön plana çıkan esas özellikleri aslında Transaction Isolation, Clustering, High Availability, Two Phase Commit gibi gelişmiş konularda yatıyor. Benim açık kaynak tutkunu biri olarak H2'nin en sevdiğim yönü ise dokümantasyonu. Mueller, SQL Grammar, Functions, Data Types, Javadoc JDBC API gibi önemli konularda çok güzel dokümantasyon yapmış.

Tabii ki her yiğidin övündüğü bir özelliği vardır, H2'nin ise bu özellik performans: (low number of concurrent connections & embedded usage)


Operations/second (higher is better) - More information about this test

Ben özellikle geliştirdiğiniz java uygulamalarını müşterilere demo olarak dağıtırken veritabanı ihtiyacınız var ise H2'yi şiddetle tavsiye ederim. H2 hakkında detaylı bilgiye http://www.h2database.com adresinden ulaşabilirsiniz.

Hayırlı bayramlar ve yeni yıllar...

0 Yorum:

Yorum Gönder

Kaydol: Kayıt Yorumları [Atom]

<< Ana Sayfa