Visit the new documentation for updated content. DB4O. Table of contents. 1 Info; 2 The Basic Principle of db4o; 3 Downloads; 4 Current Status. This tutorial was written to get you started with db4o as quickly as possible. Before you The API documentation for db4o is supplied as a compiled Help file . db4o provides sources of documentation: tutorial, reference documentation, API documenation, online paircasts and.
|Published (Last):||18 September 2013|
|PDF File Size:||8.9 Mb|
|ePub File Size:||6.58 Mb|
|Price:||Free* [*Free Regsitration Required]|
Walks you dbb4o db4o’s basic operations, its various query types, docymentation techniques for optimal data access performance.
The Object Database ODB arrived in the software industry with the advent of object oriented languages. The ODB is primarily used as an application specific database in either extreme scale systems or embedded systems where typical DBA activities are automated. If you are familiar with object-relational mapping ORM tools, then you are already an object database expert because many of the APIs and query languages are comparable. Developers were finally able to combine the power of a full database engine with plain undecorated objects.
Use the Visual Studio “Add Reference” command to add the necessary assemblies.
Then use the Solution Explorer to locate the new reference, right-click and open the properties window to ensure that “Copy Local” is set to true for each db4o assembly. This will copy the necessary documentatio libraries to your application’s bin folder automatically when compiling your project.
Visual Studio or better is suggested for the best experience, but any.
Microsoft Visual Studio Express editions are available for free download from Microsoft. Running db4o requires only the. NET Framework to be installed. Some hosting documentatlon, such as shared website hosting providers, do not documenfation code to run with full trust. When the environment is configured to run with reduced trust, all basic database operations require at least ReflectPermission MemberAccess and ReflectionEmit for the classes and types being persisted.
Depending on the features your application requires, reference and distribute these assemblies when you distribute your application:. Optimization can also be done at buildtime using Db4oTool. Included in the db4o distribution you’ll find the installer for ObjectManager Enterprise OME which, dh4o installed, will integrate into your Visual Studio Environment and allow you to open and inspect, query, and edit value types only object instances stored in your database file.
While a db4o database file is docimentation, it is locked and cannot be accessed by another application at the same time. It’s important to know that db4o works best if you open the database file when you start working with data, and close the db when all posible operations are completed.
Because db4o uses the native object or dh4o identity, it’s better to open the database or connection when dh4o application begins, do all your work, then close the database when your program is shutting down. You’ll see why when we get to updating an object with our changes.
By default, the db4o server runs in-process within your application. To start a db4o server, place this code into your application:. The port parameter specifies the network port number. Acceptable values are any number above which are not already in use. Using Port 0 for your server creates an “Embedded” server which will not be available remotely. This is useful for multi-threaded operations or web-server style environments where you wish to handle parallel operations in a single process.
It is not required at all for embedded servers. After starting a dv4o server instance, use documentatiom of the commands dcumentation to open a db4o client connection:. Just one line documentatino code is all it takes. All of an object’s properties and child objects will be stored.
You can use the same Store object command to update an object. One difference, however, is that db4o will for performance reasons not automatically check child objects for changes. By default, db4o will NOT descend into child objects.
Store must be called for each modified object unless you change the default UpdateDepth see the UpdateDepth parameter in the Configuration section, below or configure cascading update for the persisted class.
There is one more thing to be aware of: This means that there is only ever 1 instance of an object in memory for each stored instance of the object. Always make sure that the object you are trying to update or delete was previously stored or retrieved in the database.
Calling Store with 2 User objects both with an ID of “jack” documenhation result in 2 separate instances. However, if you retrieve the user, and modify the first instance, then store it again, you documentaation have only 1 updated instance in the database. You didn’t think it was any harder than that, did you? Like updates, db4o will not automatically delete child objects unless you configure cascading deletes for your object will remain in memory until the objects are refreshed or garbage collected.
Whenever you start making changes to your database using the Store and Delete commands you are automatically in an open transaction.
To close the transaction, use the Commit method:. Your changes will be permanently eb4o. If you wish to cancel or roll back any uncommitted changes, use the Rollback method:. Rollback only undoes uncommitted changes in the database. It will not undo changes to any currently loaded objects. So, when you call Rollback you will not see any difference to your objects.
If concerned about consistency, use the Refresh object command to cause the objects to be refreshed with stored database values.
Closing a database cleanly will automatically call Commit for you, so any uncommitted transactions are committed automatically. If the database is not closed cleanly, or if the application crashes at any time and uncommitted or incomplete transactions are discarded. QBE lets you pass db4o an example object. To do this, db4o will reflect all of the properties of the object and assemble all non-default property values into dv4o single query expression.
QBE queries also cannot query for value ranges greater than, less than or stringbased expressions contains, starts with.
The busy Java developer’s guide to db4o: Queries, updates, and identity
So QBE can be used only to retrieve exact-value matches. NQ can do all this because they are expressed as native. Native Query results can be sorted by using an IComparer or a comparison delegate. Here is the query syntax:. LINQ was introduced by Microsoft. NET Framework version 3. A full description of LINQ syntax will not fit in this document. LINQ Queries have all the benefit of compiler checking and automated code refactorability that Native Queries have, but are expressed in syntax more familiar to SQL developers.
Here’s one documentatioon and easy example that gets all of the Xb4o with “Smith” in their name, and sorts the results by name. SODA query expressions are a standard that was present in all but the earliest versions of db4o. Using combinations of SODA query and constraint keywords, you can build up what is called a query “graph”. A graph is a network of objects which represent a segment of data. Notice how each of the calls to Constrain will return an IConstraint?
You can keep references to those constraints and then use constraint keywords like AndOrand Not to relate the constraints together, as we did at the end of that example. Note that the Descend method returns an IQuery too. So you could Descend into an object, and then Execute at a deeper level to return only the matching child objects, like in this example:. Indexing fields is a great way to increase query performance, but xocumentation index table is one more place where a field’s value is stored.
Too many indexed fields can cause poor insert performance.
The application developer should tune the number of indexes with the desired Query and Insert performance. When dealing with objects that may have relations to other objects quite deep think of the path of data from Customer to Order to OrderItem to Product with relations to Address documwntation for billing and shipping and then PO and payment transactions it would be quite expensive to have to pull all of that data into memory from the Documnetation if all you wanted was the Customer object.
Modern object databases use the idea of activation to control the depth to which objects are instantiated and populated when retrieved from the database. The default ActivationDepth in db4o is 5. A properly tuned activation depth is the best way to optimize retrieval of data from a db4o database. See ActivationDepth in the Configuration section for more ideas. With documentatoin ActivationDepth of 5, objects will be populated up to 5 levels deep. Properties of the 5th descendant object will have their values left as default or null.
If you encounter an object that is not yet activated, you can pass it to db4o for manual late activation:. Fine-grained activation depth can be configured per class. For all but the simplest db4o use cases, you’ll probably want to specify one or more configuration settings when opening your db4o database:. The IConfiguration object must be passed in the call to open the db4o file, server, or client connection. We said earlier that when calling Docmuentation to update an object graph, that db4o will not by default ddocumentation into child objects to detect changes to the graph.
If you know that you’ll be often changing child properties, or when changing a parent object often results in changes to child objects, then docujentation may want to change the UpdateDepth. The default value 1 means db4o will not descend into child objects when updating stored object instances.
Getting Started With db4o
Setting the UpdateDepth to int. MaxValue will cause db4o to descend as deeply as possible to look for changes. Setting the UpdateDepth too aggressively can cause poor db4o update performance.
Higher values should be used to debug UpdateDepth-related issues only. As documentatiin in the section on Dealing with Object Activation, the ActivationDepth controls how much data is loaded when an object is retrieved from the database.
The default value of 5 is a good balance for most applications, but developers should balance this against the weight of their classes and their access patterns. Setting the ActivationDepth to int. MaxValue will cause all related objects to be instantiated as deeply as possible, restoring the entire object graph to memory.
Queries, updates, and identity
Setting the ActivationDepth to 0 will cause nothing to be activated. The object returned will have none of its values loaded. You can then call the Activate object, depth method to manually activate the object as described above.