Announcing java-based, J2EE-certified Daffodil DB

Discussions

News: Announcing java-based, J2EE-certified Daffodil DB

  1. Daffodil DB is a lightweight 100% java database that has passed the J2EE certified test suite (CTS) from Sun and has appreciable rating on TPC-C and EcPerf. It complies with SQL 99 and the JDBC 3.0 API and features Triggers, views, sub-queries batch updates, etc. Unlike other java databases, Daffodil also has multi version concurrency control features.

    Check out Daffodil DB.

    DaffodilDB - Article/press release

    There are seemingly countless self-paced database systems in the market today, but DaffodilDB transcends the others owing to its remarkable services available at such an astonishing price. The embedded edition of DaffodilDB is available in US$99 and the server edition is available at US$199. The evaluation version is freely available for download from http://www.daffodildb.com/DaffodilDB2_2Download.html. The evaluation version of Daffodil DB comes with a Free Developer License. The entire DaffodilDB documentation is provided for users to follow the narrations http://www.daffodildb.com/webhelp/daffodildb.htm

    The most conspicuous feature of DaffodilDB is Multi Version Concurrency Control as compared to other java database vendors like Pointbase, Cloudscape, JDataStore etc which do not support this feature. Daffodil DB provides Concurrent Access to Multiple Databases and supports Unicode. Moreover, Daffodil DB stands out from the crowd, focusing on the feature like ANSI SQL99. It provides PSM with functionalities like cursor and programmability. Daffodil DB provides full support for features like domains, stored procedures, triggers and referential integrity. Triggers can be initialized at the statement/row level with options for trigger action time and trigger event. It supports almost all the datatypes along with CLOB & BLOB and provides a number of additional scalar functions that add to the prodigious features of Daffodil DB. Some other features supported by Daffodil DB are sequences and auto increment columns.

    Daffodil DB provides JDBC 3.0 driver and features like RowSets, SavePoints and Updatable ResultSets which places DaffodilDB amongst the best databases in the market. Daffodil DB JDBC 3.0 driver is J2EE compliant and is certified by Sun Microsystems Inc. Daffodil DB also provides supports for Distributed Transactions (XA). Daffodil DB supports all the transaction isolation levels.

    Apart from these features the compatibility of Daffodil DB has been tested with other complimentary technology products like Application servers (Oracle9Ias, SunOne, Pramati, J2eeRI), Database Tools (DB Visualize, Kodo-JDO, Hiberbnate, SQuirreL SQL Client, WinSql), Java Database Obejcts() and the product is found to be very promising in terms of its performance.

    Threaded Messages (33)

  2. Check this out![ Go to top ]

    Hi Guys,

    McKoi is an open source database with great performance and excellent support. Check it out at http://www.mckoi.com and you'll be glad you did.
  3. Check this out![ Go to top ]

    I should mention that mckoi is 100% Java database engine.
  4. MCKOI DB[ Go to top ]

    I'm user the Daffodil DB guys are happy about the previous two posts.
  5. Java[ Go to top ]

    All java databases are becoming more and more popular.

    Commercial
    - Pointbase
    - Borland JDataStore
    - Daffodil
    - FirstSQL
    - Cloudscape

    Open Source
    - HsqlDB
    - McKoi

    Anyone somewhere has written a comparison of these RDBMS?
    Experiences to share?

    François
  6. Java[ Go to top ]

    I just want update the link of Daffodil DB, it is
    www.daffodildb.com
  7. No Updatable ResultSet[ Go to top ]

    McKoi is fine in general. But it doesn't have updatable ResultSets.
  8. No Updatable ResultSet[ Go to top ]

    You can find it in Daffodil DB
  9. Interesting...[ Go to top ]

    First time i've heard about Daffodil. How does it compare (in features/performance) to some of the other Java-based DB's? (Pointbase, HsqlDB, McQoi etc.)
  10. Interesting...[ Go to top ]

    First time i've heard about Daffodil. How does it compare (in features/performance) to some of the other Java-based DB's? (Pointbase, HsqlDB, McQoi etc.)


    I am using Daffodil DB for last one year. It is best suitable for my application, if I compare it with other contemporary java databases in regards of performance, features and price. I found Daffodil DB only database which support maximum constructs of SQL99 at such a low price.
  11. Ratings[ Go to top ]

    Where do I find the rating on TPC-C and EcPerf?
  12. I've been seeing a lot of Java based databases being marketed ...

    I'm curious to know what kind of enterprise applications, application domains would use a Java DB.
    Are there any popularly available tools that have embedded java databases?
    Are they restricted to "mobile" or "palm" kind of applications that need a small local database?

    Just curious.
    Thanks!
    --Das
  13. Dear Das,
    Java databases are full-fledged RDBMS that are not only suitable for J2EE applications but also you can use it in all kind of applications. Java databases are now latest SQL specification compliant. All Java databases provides JDBC drivers which is suitable for the J2ee applications. It provides small footprints so it is very easy to embed in any application this is the reason why it is popular in mobile and palm kind of applications. Because these databases are developed in java it additionally enjoy the support of platform independence.

    Java databases are suitable for the distributed applications too, if they provides XA implementations. Now a days most of popular brands provides XA implementation. Most of the popular sites are now using java databases.

    Ashish Srivastava
    Daffodil DB Team member
  14. Most of the popular sites are now using java databases.


    Really?
  15. Most of the popular sites are now using java databases.

    >
    > Really?

    It is true MySQL is one of their choice, but people prefer to use platform independent database.
  16. I've considered some of the 100% Java DB's before, if only to simplify my server configuration. They simplify development and deployment, since you can embed and bundle everything you need. Daffodil seems to lead the pack as far as capabilities, though some of the others are adaquate for smaller needs.

    My problems with them are:

     - Their management tools, especially command line tools, are frequently under developed. Being able to drop in, execute some commands, and get work done is necessary. I don't want a swing/gui requirement to do this, as some solutions require.

     - Their support of online backup/recovery, or even offline, is not always robust.

     - You frequently have the choice of embedding vs. running as a server, but if you embed you need the ability to handle ad-hoc connections (for example, in an external query interface). You could embed and still run the server I suppose though.

    What I like about them is that they are generally very low overhead, very fast, and use agressive caching to keep speed up. If you are embedding and pushing SQL queries within the same JVM, it can be a very fast solution.

    Out of curiosity, how does Daffodil handle the cases I detail above?
  17. Or announcing it again??

    announce

    Seriously, can anyone give me any business cases with Daffodil? We already managed to get rid of JBoss and now it would be good time to get rid of MySQL also. With any reliable and fast java based embedded database the installation process would be ridiculously easy =).
  18. This announcemnet was posted after release of Daffodil DB v 2.2 which has added funtionality (including unicode support and data encription etc ..) and improved performance.

    Daffodil Software has issued more than 500 develper licenses (which is free till now) in last 2 months for embedded and network version to ISVs and individual developers. Most of them are using Daffodil DB in web related applications.
  19. This is from the online manual:
    -------------------------------
    Data File

    The data file contains the data (tables, indexes, etc) for the database. Each Daffodil DB database comprises of a single data file. A data file is further divided into clusters of 16KB each. File extension for data file is .ddb.
    -------------------------------

    Does this mean that the maximum size for database is limited to the maximum operating system supported file size? In windows this would mean maximum of 4GB database? Some of our databases are already over 3GB barrier and we expect to see >4GB databases sometime during next year. That would automatically rule daffodil out of the equation. (We deploy on linux too, but some of our customers want to deploy on windows)

    P.S.
    Please be more specific when reporting the physical limits of the database.
  20. The maximum size for database is not limited to the maximum operating system supported file size?

    Daffodil DB supports multiple files to store the data of single database. But to activate this feature you need to provide couple of properties while creating the database.

    These are:

    MULTIFILESUPPORT = true
    INITIALFILESIZE = 100m
    INCREMENTFACTOR = 20

    Here INITIALFILESIZE is the limit of first data file. Subsequent file size is the based on the value of property INCREMENTFACTOR ie percentage of size of initial file (20 mb in this case).

    Following is the code snippet:

    Properties p = new Properties();
    String url = "jdbc:daffodilDB://localhost:3456/sample"
    p.put("user", "userName");
    p.put("password", "password");
    p.put("create", "true");
    p.put("MULTIFILESUPPORT", "true");
    p.put("INITIALFILESIZE", "500m");
    p.put("INCREMENTFACTOR", "100");
    Connection con = DriverManager.getConnection(url,p);

    This is not included into the documentation of current release. Will be included in next release.
  21. Thx for the info. I think we're going to test the Daffodil as one alternative database solution for our customers.
    I really fancy the idea of embedded database since the activity 'happening' within the same VM should speed small queries considerably. A friend of mine ported recently a subsection of their internal database program (C and oracle) to Java and HSQLDB and now it's running same queries 3x faster on a same platform =)
  22. This provides not only faster but also a platform independent solution. This is the reason why more and more people are accepting it for their applications.
  23. The Speed[ Go to top ]

    Preliminary results are not good. I'll post some numbers along with the statements when I've checked everything but the initial impression is:

    MySQL + JDBC >10x faster on inserts than Daffodil Embedded + JDBC

    Daffodil Embedded slower on simple selects at first run, slightly faster on subsequent runs of the same prepared statement.

    In MySQL it is possible to do 'SELECT * FROM someTable WHERE someField LIKE '%someText%' even if the field is defined as MEDIUMTEXT (mediumtext is a text blob with max length of 65535 chars).

    I defined the same field in daffodil as CLOB(65535) but could not run 'LIKE' query against it.

    Is there a way to do 'LIKE' searches on blob-type text fields in daffodil? This is critical to our application.
  24. The Speed[ Go to top ]

    I've done some more benchmarking and this is the general result: (I can post numbers and examples if anyone's interested)

    - MySQL is ~10x times faster on inserts than Daffodil
    - Daffodil is ~10x times faster on selects than MySQL (even on joins with three tables and two constrainting parameters)

    But the primary issues are:
    how can one do a text search from (clob?) field in Daffodil? It doesn't have to be a full text search, only ~255 first chars or so?

    Can the (auto incremented) primary key be any other type than integer? (I'd need long (8 bytes))

    Is there a way to do something about the slow insert performance?

    I also tried FirstSQL and guess what... It doesn't support auto increment fields! Here's the lame a*s excuse from their FAQ:

    ------------ snip ------------
        2.8 Is there a good way to implement auto-increment in FirstSQL/J.

    You mean document a workaround for auto-increment? The problem is there is no standard way of doing it, so we have to figure out a technique. In addition, the standard problem with auto-increment is how does the user the figure out what key was assigned (every DBMS seems to have its own technique.)

    The technique here is to use a separate table that assigns ids. It is used it in Bench3Run. For example;

    CREATE TABLE surrogate_key (table_name VARCHAR(128) PRIMARY KEY, id INT)

    There is row for each table requiring an auto-increment key. A new number is assigned by incrementing the id under transaction control.
    ------------ snip ------------

    how does the user figure out what key was assigned? You guys are developing a java database but haven't heard about JDBC 3?!

    Here's how you do it:
    long key;

    PreparedStatement ps = con.prepareStatement(myInsertStatement, PreparedStatement.RETURN_GENERATED_KEYS);
    .
    .
    .
    ps.executeUpdate();
    ResultSet rs = ps.getGeneratedKeys();
    if(!rs.next()) // should not happen...
      throw new SQLException("Unable to get generated primary key!");
    key = rs.getLong(1);

    Works the same way in every database that has a JDBC 3 driver (MySQL).
    Quoting Nick Burns here... 'was that so hard?!"

    P.S.
    FirstSQL doesn't even seem to have blob fields for characters. At least I couldn't find them from the docs. I guess I'll stick with the MySQL after all the prepared statements should be working with 4.1 when it's 'ready'
  25. The Speed (Daffodil engineers/salespeople)[ Go to top ]

    Can the (auto incremented) primary key be any other type than integer?

    > (I'd need long (8 bytes))

    Oops. That one was HSQLDB's limit, not Daffodil's.
  26. I agree with your observations regarding the comparison of Daffodil DB with MySQL.

    Insertion in Daffodil DB is slower as compared to that in MySQL. Daffodil DB Team is working to improve the performance.
    But in my opinion the select query is the most crucial one and it is beneficial for the application that Daffodil DB's performance is better than the premiere players.
     
    The feature of full-text search is not included in the previous versions or the latest release of Daffodil DB, hence the ‘like’ in clob is not working in these versions. Full text search is an integral part of the road map for Daffodil DB v2.4.

    Auto increment Field
    ---------------------
    Daffodil DB supports auto increment in following field types:
    BIGINT, BYTE, INT, INTEGER, LONG, SMALLINT, TINYINT, DOUBLE PRECISION, FLOAT, REAL, DEC, DECIMAL, NUMERIC

    There is no such standard defined for AUTOINCREMENT in SQL99 also, but Daffodil included a very simple rule in its SQL grammar to provide the support for the same.

    Example of Create table included Auto-incremented field:

    Create table auto_increment_demo (id INT AUTOINCREMENT, name VARCHAR (25));
  27. Thx for the reply!

    If you can manage to squeeze more 'oomph' to the insert statement (I think we could live with 2...4x slower insert compared to MySQL) and you get the full text search working I'm all for Daffodil.

    I'll take a new look when 2.4 is out.
  28. I just want to confirm whether you used PreparedStatement to insert the records or simple insert statements.

    Maximum characher size of varchar field in Daffodil DB is 4096, which means you can store large enough data in a column and also get feature of 'like' in query to search.
  29. PreparedStatements

    The Person table consists of
    ID - bigint autoincrement primary key
    NAME - varchar(30)
    TEXT - varchar(80)

    Similar Company table

    and Link table with:
    PERSON bigint not null
    COMPANY bigint not null
    and UNIQUE(PERSON, COMPANY)

    20000 entries in person table, value of name field same than the ID field and text field with text "a bit text here to make sure this field is not empty!"

    2000 entries in company table, similar to persontable entries

    20000 entries in link table with 10 persons/1 group.

    Here's one of the getter tests:
    public void selectAndJoinAllInTenChunks() throws SQLException
    {
      PreparedStatement ps =
          con.prepareStatement("select * from PERSON p " +
                               "left join LINK l on (l.person = p.id) " +
                               "left join COMPANY c on (l.company = c.id) " +
                               "where p.ID >= ? and p.ID < ?");
      long counter = NUM_PERSONS / 10;
      for(int i = 0; i < 10; i++)
      {
        long start = i;
        long stop = (i + 1);
        ps.setLong(1, counter * start);
        ps.setLong(2, counter * stop);
        ResultSet rs = ps.executeQuery();
        rs.close();
      }
      ps.close();
    }
    And here's the fill person table method
    public void fillPersonTable() throws SQLException
    {
      PreparedStatement ps =
          con.prepareStatement("insert into PERSON (NAME, TEXT) values(?, ?)");
      for(int i = 0; i < NUM_PERSONS; i++)
      {
        ps.setString(1, String.valueOf(i));
        ps.setString(2, String.valueOf(i) + someLongString);
        ps.executeUpdate();
      }
      ps.close();
    }

    These're just some 'ad hoc' statements not based on any real life app.

    Test results in my HW (1.6GHz mobile P4 laptop, win XP, 512MB memory)

    --- MySQL 4.1.0 JConnector 3.0.8 --
    fill persons took: 9313 [ms]
    fill groups took: 932 [ms]
    fill links took: 8402 [ms]
    select and join - ten chunks took: 1052 [ms]
    select and join - ten chunks took: 1041 [ms]
    select and join - ten chunks took: 1022 [ms]
    select and join - ten chunks took: 1051 [ms]
    select and join - ten chunks took: 1052 [ms]

    --- Daffodil 2.2.1 ---
    fill persons took: 58634 [ms]
    fill groups took: 5579 [ms]
    fill links took: 57262 [ms]
    select and join - ten chunks took: 60 [ms]
    select and join - ten chunks took: 10 [ms]
    select and join - ten chunks took: 20 [ms]
    select and join - ten chunks took: 10 [ms]
    select and join - ten chunks took: 20 [ms]

    Although these are microbenchmarks and should be treted as such they still show Daffodil in very favorable light.
    I'm probably going to do some more bmarking in the following weeks with more complex queries and more client connections. The actual speed difference in inserts is more like 6x and not 10x as I previously reported and this is on MyISAM tables which don't support referential integrity constraints and transactions. Maybe the gap when using InnoDB tables is even smaller than the mentioned 6x.
    The huge difference in select and join statement could be partially related to the fact the the mysql has to 'move' the resultset over some connection mechanism (socket?) and transform it to something java can handle. Embedded daffodil can simply return a reference to constructed resultset.

    Looking forward to see 2.4 released!
  30. Daffodil DB V 2.4 Beta has been releases.
  31. The most optimized version of Daffodil DB ie DaffodilDBV3.2.1 has been released.

    Click to download
  32. Hi folks ,
              A very optimized version of Daffodil DB (v. 4.0 ) have been released and a fully optimized version (DaffodilDB 4.1 ) are going to release very soon .


       --Manoj Kr. Sheoran
         www.daffodildb.com
  33. DaffodilDB v4.1 is available now[ Go to top ]

    Glad to infrom you people that DaffodilDB v4.1 is available not. For more infromation please visit to http://www.daffodildb.com


    Regards,
    Manoj Kr. Sheoran
    Daffodil DB Team Member
  34. DaffodilDB v4.1 is available now[ Go to top ]

    Glad to infrom you people that DaffodilDB v4.1 is available now. For more infromation please visit to http://www.daffodildb.com


    Regards,
    Manoj Kr. Sheoran
    Daffodil DB Team Member