Feautures of standalone and server versions of VelocityDB |
Standalone
Version
|
Server Version
|
|
Scalable (smart cashing enables millions of database to be used
without running out of memory). From the smallest to the largest databases in
the world, VelocityDB can handle it nicely
|
|
|
|
High Performance (objects are created the same way transient
objects are and are made persistent efficiently when requested, persistence does
not change the object, just adds an object identifier)
|
|
|
|
Any serializeable object can be persisted
|
|
|
|
Compression (optional at page level, controlled by user for
each database location)
|
|
|
|
Encryption (optional at page level, controlled by user for each
database location)
|
|
|
|
Indexes (Declarative by using Index attribute in class definitions, index BTree's are maintained automatically by the system)
|
|
|
|
Optional automatic backup of all data in a database location to a backup location
|
|
|
|
Variable page size (from a few bytes to GB’s depending on how
many objects and their sizes). Databases and pages do not contain any unused
bytes (unlike fixed size database pages), only space for allocated objects |
|
|
|
Auto recovery build in (no journal files required)
|
|
|
|
Transaction control
|
|
|
|
Choice of Pessimistic locking and Optimistic locking
|
|
|
|
Change event subscription and notification
| |
|
|
Page level locking
| |
|
|
Database level locking
|
|
|
|
Each persistent object has an object identifier, a 32 bit
Database number – a 16 bit Page number – a 16 bit Slot number, (stored as a
single 64 bit number)
|
|
|
|
[UseOidShort] attribute for references within a
Database. Use attribute for an entire class or for selected fields of a class.
|
|
|
|
Shared cache for all users (on server side)
|
|
|
|
Local cache for each client
|
|
|
|
Pure C#, no SQL and no unmanaged code
with a small set of easy to use API
|
|
|
|
Very small footprint, the C# DLL is 376 KB, the server is 11 KB
|
|
|
|
Automatic use of efficient binary search lookups with LINQ query over a BTreeSet using CompareByField comparator. |
|
|
|
Scalable, compact and super-efficient BTreeSet<Key> and BTreeMap<Key>
collections are provided for keeping track of large sorted collections. Other
collections provided include: VelocityDbHashSet<T>, SortedSetAny<Key>,
SortedMap<Key, Value> and,
VelocityDbList<Key> |
|
|
|
Spatial
access methods, an RTree collection is provided modelled after
Wikipedia description with some enhancements. |
|
|
|
A WeakReference<T> class is provided that avoids pinning of
large graphs of related objects. Objects are brought back on demand (we save the
object identifier in the WeakReference)
|
|
|
|
Persistent objects can be unpersisted which removes the object
from the persistent storage, and then again can be used as any transient object.
These can later be persisted again, possibly in a different database
|
|
|
|
Databases can be distributed to as many hosts as required
|
|
|
|
Linq, Use it with; Indexes, persistent collections, Databases or session (AllObjects<T>()) |
|
|
|
No Database catalog, only database locations
|
|
|
|
Automatic deadlock detection
|
|
|
|
Automated tracking of all update transactions and what they update
|
|
|
|
Using Windows Authentication when accessing server(s)
|
|
|
|
Placement class for selecting where to store persistent
objects. Each persistent class can also help decide about the placement by
overriding some base class API. Persistent placement can further be controlled
by the field attribute: [ObjectsPerPage(1)] which specifies how many objects are
allowed on the same page (in this case 1). |
|
|
|
Transient data members in persistent objects are supported by
tagging them [NonSerialized]
|
|
|
A fast, easy to use browser
 |
|
|