VistaDB is an embedded SQL database engine that delivers full database management support in a serverless design. It allows software developers using Visual Studio 2008 / 2010 and other .NET development tools to build robust WinForms and ASP.NET database applications using TSQL commands or VistaDB's own high-speed Direct Data Access (DDA) data objects. XCopy deployment makes distributing your VistaDB embedded applications a breeze with zero configuration and no runtime costs.
The VistaDB embedded database engine processes SQL commands and performs low-level reading and writing of data in VistaDB databases. The entire VistaDB engine is contained in a single less than 1 MB fully managed assembly which may be freely deployed with your applications.
The engine (i.e. assembly) does not require any special registration or configuration on the end-user machine (zero config). It can be placed in the same directory as your applications or it can be installed to the GAC. Another way to deploy the VistaDB is to fully embed it into your EXE using Microsoft ILMerge. We call this ZeroClick deployment since there is no additional files or assemblies to deploy with your application.
NOTE: Not all editions support all features. See the VistaDB Edition Matrix for more information.
Applications built using VistaDB can access data on local drives and shared network drives (e.g. F:\MyDatabase.VDB4) in both single and multi-user mode. That means multiple users can access the same database and tables concurrently. This type of multi-user data access is often referred to as a "file server" or "peer-to-peer" configuration.
Developers benefit from VistaDB's table and row locking so that applications can lock rows for editing, or lock tables for general file maintenance. The built-in Read comitted isolation level Transaction Processing helps ensure good data integrity and repeatable read scenarios for multi user access. Developers using VistaDB's DDA technology can manage table and row locks manually. Either way, data can be simultaneously accessed by multiple users.
In a shared network scenario, Windows workstations require additional resources to manage the sharing of the database file, or any file for that matter. Each VistaDB client application running on each Windows workstation must open the entire .VDB4 database file on the shared network drive, which will cause network traffic. The Windows file sharing sub-system is in control of how the file (i.e. database) is open.
The key point to understand is that the first user that accesses the VistaDB database on the shared drive will experience very good performance relative to local desktop access. Windows recognizes that they are the only user of this file and Windows is able to open the database in a type of exclusive mode (The VistaDB open mode settings have no affect on this Windows setting. This is internal to Windows). However, the moment a second user accesses the same database, Windows drops its exclusive mode file access down to a shared mode file access which is magnitudes slower. Windows Server Operating Systems perform better in this scenario, but still degrade multi user on a single file.
Even after the 2nd user closes his connection to the database, and the first user is back to being the only user working on the database, this first users's Windows workstation does not resume exclusive mode file access until the file (i.e. database) is closed and re-opened. The solution is to not keep connections open in this type of environment, open them for the minimum amount of time required (always a good programming practice).
A good solution in these cases is to create a small Windows Service (SOAP, and WCF services work just as well) to answer database queries. This will allow the local service to open the database in exclusive mode, and each client only has to ask questions to the service. This can result in much faster operation than sharing the file on a network drive.