Vipul,
This is a complicated question, and I can only give you a general
answer. H2 is not usable for data warehousing, distributed databases,
and in general very large databases. Millions of rows or 10+ GB
databases may cause performance problems. If your app makes heavy use
of triggers or stored procedures, the java triggers & stored
procedures are clumsy to use. I don't think large numbers of tables
pose a problem (assuming we're not talking in the hundreds or
thousands), but large numbers of indices per table IS a problem for
performance.
I think it's only fair to say where H2 shines as well: it's faster,
more flexible, and easier to set up than MySQL, SQL Server, or
PostgreSQL for most applications. It is ideal for embedded
applications, local or personal databases, small to medium sized
business, and dynamic websites. The java stored procedures make it
easy to extend it with new features -- if you're feeling clever you
can use H2 for just about anything. There's something to be said for
tossing together a full database in 15 minutes hour or less. I may be
biased, since I'm willing to contribute my personal time to the
project, but I think H2 is just better-designed than a lot of the
competition.
abc6587: H2 uses checksums to verify data integrity, and is as close
to ACID transaction safety as most databases (see documentation:
http://www.h2database.com/html/advanced.html#acid )
As long as you avoid the experimental features and do not disable
integrity checks, you should NEVER see corruption of the database
itself. Users still report index corruption from time to time, but
this is easily solved by rebuilding the index, and doesn't impact
stored data.
Regards,
Sam Van Oort
(Formerly listed as Bob Mcgee for privacy reasons)