InfinityDB is an all-Java B+Tree database engine that is embeddable in the smallest to the largest applications that run on hand held devices, workstations, servers, or in distributed systems. InfinityDB provides a data integrity guarantee through all non-media failures, provides a simple API with only a few basic methods, and requires no administrative support. Version 2 offers full ACID transactionality without a log and with fine-grained locks. Programmers can easily superimpose their own data model or employ the Entity-Attribute-Value model by direct low-level access. The basic engine provides multi-valued or set attributes, all primitive Java types, unlimited Large Objects, heterogenous values, composite keys (Entities) and values, and unlimited sparse attributes, all extensible in-place with no schema changes.