World’s Fastest, most Scalable C# .NET Object Database
VelocityDB is an Object Database but it is also a
NoSQL, a Graph Data Store
and an excellent choice for Embedded
database or a Distributed database.
By using class BTreeMap<Key, Value>, an efficient distributed
Key/Value store is provided as well.
What is OODB?
An object database system allows software developers to develop application data models, store them as objects, and replicate or modify existing objects to make new objects within the object database system.
The database is integrated with the programming language, allowing the programmer can maintain consistency within one environment,
since both the database system and the programming language will use the same model of representation.
Among other benefits, this architecture eliminates the need for a cumbersome mapping layer between the database model and the application data model.
Object verses Relational
A relational database stores all data in tables on a server. Clients talk to such servers using
SQL statements such as "select * from actors". Data is also created and updated using SQL.
VelocityDB is not a relational database
(but it is very good at managing relations!), with VelocityDB
C# objects
are stored as objects with all references/relations between the objects. Using VelocityDB persistent
C# objects
is very similar to using in memory C# objects. Data is created by creating C# objects, updates are accomplished by updating C# objects. The persitent store is safely done using
transactions with
locking
protection so that one user can't accidently undo other user's changes.
Like most database systems,
VelocityDB uses paging but unlike other systems VelocityDB data pages have variable size and can optionally be encrypted and compressed.
VelocityDB persistent objects have an object identifier (Oid) consisting a
DatabaseNumber-PageNumber-SlotNumber.
Customer Highlights
Our first customer in France, pays for VelocityDB license using PayPal.
I luckily stumbled across VelocityDB a week or so ago and gave it a try WOW.
Object databases done right should be scalable, simple, fast and elegant.
VelocityDB is just that. It's very simple to use, certainly more than some other
object databases. It works just like you think it should. The way it handles the
object depth issue using WeakReference as a id to a collection is very elegant.
Unlike others where you explicitly state the object depth before a query and if
you get it wrong it just returns a null (set too low) or you cop a big
performance hit (set too high). It's scalable - OK, I have not pushed it here as
they say it can deal with billions of objects, I've only created about 10
million objects which it does not even blink at. That said I've used other
object databases that had trouble with less than this. It is blindingly fast.
The first time I loaded the database from a file I thought I had a bug because
it finished so quick. But it had done them all. Check out their web site for
benchmark comparisons. VelocityDB will change your mind about how your app can
and should persist data. I'm a big object database evangelist anyway, but
I've told everyone who will stand still for 30 seconds how good it is. Its
scalable, fast, simple and elegant - perfect! I've used DB4O before and although
it is fairly simple it was slow, less than elegant and certainly not scalable.
Tony Jackson, Canberra - Australia.
Benefits
The most important benefit is the flexibility that this database system provides. No other types of database system lets you fine tune your application to the finest details.
Using VelocityDB, you can choose the best possible data structures for your application. You can control exactly where you place the data persistently. The placement choice can make
a huge difference for performance. With VelocityDB you will have the ultimate tool for persisting data efficiently with unbeatable performance.
Unstructured Data can be managed efficiently using VelocityDB. Several of the sample applications provided with the
download explore unstructured data.
The triangle counter test demonstrates how
efficient it is to follow association/relations. In memory, an association in
VelocityDB is simply a C# object reference.
It can't get any more efficient than that. The Kevin Bacon Numbers sample
is another example showing how efficient we can handle unstructured data. A
common way to manage unstructured data is to add such data to an
inverted index. That
way we can efficiently query such data, like if we want to know what store
products that match one or more words. The entire Google search mechanism is
based on an inverted index. In some of our samples we use inverted indexes,
these samples include; TextIndexer and
Wikipedia.
VelocityDB is extremely scalable, it can handle small applications with small amounts
of persistent data as well as applications using trillions of objects up to
about an Yottabyte in size per session. Unlimited number of sessions can be used
per application. Performance is fantastic, a billion Person object database is
quickly created, a little over 1 hour, and can be browsed with the VelocityDbBrowser.
System Requirements
To use VelocityDB you need to have Visual Studio 2010 C# and a
Windows 7
PC (other Windows versions OK if recent).
Other .NET languages may also be used.
SharpDevelop is a free
light weight alternative to Visual Studio. Some
versions of Visual Studio are also free. MacOS and Linux platforms are available by using the cross platform, open source .NET development framework mono.
Android and iPhone deployable C# .NET applications are possible by using
MonoTouch. Free trial download of VelocityDB is available
here.
Let us know if you would like to use a portable library version of VelocityDB that runs on Silverlight 4, Windows Phone 7
and/or Xbox 360 as well as .Net Framework 4.
It looks like it can be done but with some functionality stripped out such as encryption and VelocityDbServer support
Usage Choices
Use VelocityDB standalone on a single PC or use unlimited distributed clients with unlimited distributed servers.
Standlone version can do almost everything that the client + server(s) version can do. See the feature table
comparison for the differences.