Actian Zen Architecture
What is Actian Zen?
Actian Zen is the current name for a long line of products used to store and retrieve data on computers since the 1980's. Previous names for the product include Actian PSQL, Pervasive PSQL, Pervasive.SQL, Scalable SQL, and Btrieve. Originally released in 1982, the Btrieve database engine provided early developers with a fast, flexible, and stable data storage environment for those early DOS-based applications, based on the Btrieve API -- a low-level, record-oriented data store. Subsequent versions supported the same Btrieve API on such storied platforms as NetWare, Windows 3.x, Windows 9x, OS/2, and Windows NT/2000, with even later versions including several flavors of Linux, including Mac OSX and Raspbian Linux. Actian has since added edge computing environments (like Windows IoT, Windows Nano, Android, and iOS) as well. Zen offers both transactional access methods (via the MKDE) and relational access methods (via the SRDE), and these methods can be used interchangeably or even simultaneously.
The current Zen database engine continues the long-standing history of providing a direct record-level access method with extremely high performance and a high degree of flexibility for the developer with respect to data structures. It is the original NoSQL database, but it ALSO includes a full ANSI-compliant SQL engine that can be accessed through ODBC, JDBC, ADO.NET, and other interfaces. It supports database record sizes to 4GB, and individual data file sizes up to 64TB, and it has become the database engine of choice for applications within just about every vertical markets, including airlines, banks, dentists, doctor's offices, funeral homes, insurance companies, long term care facilities, steel mills, timber harvesting, and utilities.
Actian Zen MKDE
At the heart of the Actian Zen environment is the Microkernel Database Engine, known as the MKDE, and a common MKDE data file format which is used to store blocks of data provided by the application directly into the storage system, along with indexes for later retrieval. At the MKDE level, data records are simply blocks of bytes, with index definitions in some cases, which offers the flexability to use any possible data type, even developer-defined data types. The MKDE storage format is identical across all of the platforms in which the engine can operate, thus simplifying data transfer and eliminating the need for complex ETL. This file format provides applications with control over the data storage through attributes record size, page size, on-disk encryption, and multi-segment index definitions that specify data to be stored in each of the B-tree index structures. Additional features include record compression, variable record sizes, blank truncation, index balancing, and the availability of hidden "system data" that can uniquely identify a record's origination or last modification time. While a majority of the MKDE accesses are done through individual record operations (i.e. insert, update, delete, read), the MKDE also supports extended operations that can act on many records at a time, reducing the number of database engine calls needed to perform lengthy operations.
Actian Zen SRDE
Sitting atop the MKDE is a full-featured, ANSI-compliant, SQL Relational Database Engine, known as the SRDE. The SRDE offers fully-relational access to the data, which is ideal for set-based operations or from environments where control over memory data structures may be insufficient for direct MKDE access.
Actian Zen APIs
The primary benefit of the Zen architecture is the ability to layer multiple Application Programming Interfaces (API's) on top, each supporting access to the data in its own way, from its own languages. The Zen programming interfaces can most easily be shown graphically:
These APIs include:
- Btrieve: The Btrieve API supports extremely-fast, low-level access to single database record with minimal overhead, ideal for 3GL environments, like C, C++, BASIC, COBOL, Fortran, Assembler, and the like.
- Btrieve 2: The Btrieve 2 API is a more recent development, but uses an easier to understand series of API calls designed for object-oriented environments, but also supporting lower-lebvel languages. Btrieve 2 can be accessed natively from C, C++, and C#, but it can also be accessed via SWIG (Simplified Wrapper and Interface Generator) from scripting environments like Perl, PHP, Python, and more.
- Active X: The Active X API supports visual development to the Btrieve API through VisualBASIC.
- Java Class Library: The JCL interface offers a series of Java classes that support native Btrieve operations from the Java programming environment.
- ADO.NET: The ADO.NET data provider SDK offers integration of the templates and tools with the Microsoft Visual Studio 2017/2019 development environments.
- Open Database Connectivity: The Microsoft ODBC standard interface can be used to submit SQL queries to the Zen engine for processing. Instead of requesting records one at a time, standard SQL record set management is included for data retrieval, storage, and management.
- Java Database Connectivity: The JDBC interface offers Java developers the same access to SQL operations as ODBC does for Microsoft developers, thoguh the Type 4, 100% Pure Java Certified client driver on the JDBCTM 4.0 standard.
- PSQL Direct Access Components: The PDAC offer direct access to BOTH the low level Btrieve and higher-level SQL interfaces to developers using Embarcadero Delphi and C++ Builder and offer a direct replacement to the Borland Database Engine (BDE).
- Distributed Tuning Interface: The DTI interface provides environment management functionality to developers using 3GL environments (such as C, C++, etc.) codifying access directly to the engine configuration and monitoring capabilities, as well as licensing.
- Distributed Tuning Objects: The DTO interface provides access to the same information as DTI, but to object-oriented environments, including C#, VBScript, and PowerShell.
Actian Zen License Models and Platforms
Actian Zen is has five different license models to choose from, each with its own list of supported platforms:
- Core Library Engine: The library for Android and iOS environments is available with no licensing cost and offers direct access to local database files through either the MKDE or SRDE, as well as operating as a client to other engines.
- Edge Server Engine: Zen Edge Server provides per-user licensing for RPi or Windows IoT computers, supporting up to 10 concurrent users on low-cost, embedded hardware, including 32-bit or 64-bit AMD/Intel or ARM solutions.
- Workgroup Engine: The 32-bit Windows Workgroup Engine offers per-user licensing for Windows computers to small workgroups, with a maximum of 5 concurrent computers sharing access to the same data set.
- Enterprise Server Engine: For larger systems (over 5 concurrent users), the Enterprise Server engine extends the per-user licensing for Windows, Linux, or Mac servers, covering server-class configurations from 6 to hundreds of users. The Server Engines are full, multithreaded, 64-bit implementations, and therefore have access to all memory resources and CPU cores on the host computer for best possible performance.
- Cloud Server Engine: When per-user licensing cannot be controlled (such as when using a middleware tier or for web/SaaS environments), the Zen Cloud Server licensing model offers licensing based solely on data size. Contrary to its name, it can also be used in local server installations when the data size is relatively small and the user count is very high -- supporting an unlimited number of concurrent users!
Please see our Zen v15 License Primer for more information on the various license types and other factors that might help you determine the best license type for your environment. If you have decided on per-user licensing, but you are still not sure if you want the Workgroup Engine or the Server Engine, check out our Workgroup Versus Server Comparison Chart.
List of Limits and Maximums
Here's a quick list of limits and maximums in the Zen database environments. Note that some maximums are dependent on one or more external factors, such as page size, file version, engine version, metadata version, and so on.
- Record Size: From 4 to 2^32-1 (4 billion) bytes
- Page Size: 512 to 16384, in multiples of 512
- Maximum Pages Per Table: 2^32 (4B)
- Maximum File Size: 64TB (per file)
- Maximum Records Per Table: 9.2 Quintillion, or limited by file/record size and page count
- Maximum Tables Per Database (SQL): 2^31 (2B)
- Maximum Columns Per Table (SQL): 1536
- Maximum Columns Per Database (SQL): 2^31 (2B)
- Maximum Length of Index: 255 Bytes
- Maximum Length of SQL Column: 2^31 Bytes (2 GB)
- Maximum Indexes Per Table: 119
- Maximum Index Segments Per Table: 420
- Native Data Types Supported: Approximately 40
- Integer Fields Supported: 1-Byte, 2-Byte, 4-Byte, 8-Byte, Signed and Unsigned
- Floating Point Fields Supported: 4-Byte and 8-Byte, IEEE or Microsoft Basic Format
- Maximum CHAR/VARCHAR Field Length: 8000 characters (255 for Indexed Fields)
- Native Date Range Supported: 0001-01-01 through 9999-12-31
- Maximum SQL Name (Table, Column, View, etc.) Length: 128 Characters
- Maximum Concurrent SQL Connections: 2001 (default, can be increased)
- Maximum Arguments to a Stored Procedure: 300
- Maximum SQL Statement Length: 512 KB
- Concurrent Threads Per Parent Process (MKDE): 65536
If you are a developer and you have a question about a specific limit that may be critical to your implementation, please let us know and we'll find you the answer!
If you have additional questions about the product line, please contact us!
|