# eXtremeDB Technical Specifications

> In addition to the supported host, target and hardware platforms listed on the Supported Platforms page, the following sections describe some technical specifications and features of eXtremeDB and eXtremeSQL.

> ## Database Limits

> Following are the default maximum parameters for eXtremeDB databases on 32-bit and 64-bit architectures (these may be modified in source code and/or provided as pre-built binary libraries by McObject Support):

> Limit | 32-bit | 64-bit
> --- | --- | ---
> Maximum objects per database | 2^32 = 4,294,967,295 | 2^64 = 18,446,744,073,709,551,616
> Maximum classes per database | 65,535 | 65,535
> Maximum fields or vectors per class | 65,535 | 65,535
> Maximum fields per index | 65,535 | 65,535
> Maximum elements per vector | 65,535 | 65,535
> Memory requirements | As little as 200K | As little as 200K
> Maximum databases open simultaneously | 32 | 32
> Maximum simultaneous connections per database | 100 | 100

> ## Programming Interfaces

> ### C and C++

> A C library of standard database functions (e.g. cursor functions) provides an interface common to all eXtremeDB applications. And an application-specific native C and/or C++ API is generated when a database schema is compiled. Because it is based on the developer’s data design, this interface is intuitive and optimized for a project’s exact needs.

> ### Python, Java and .NET Framework

> Native language interfaces are provided for Python, Java and C#.

> ### SQL

> In addition, eXtremeSQL provides embedded SQL, JDBC, ODBC and LINQ interfaces, and the ability to write user-defined functions ("stored procedures") in Lua.

> ## Index types and queries

> eXtremeDB supports virtually all data types, including structures, arrays, vectors and BLOBs and Unicode. Querying methods using native language interfaces include the following index types:

> - hash indexes for exact match searches,
> - R-trees for GIS/mapping applications,
> - B-tree indexes support queries for pattern match, range retrieval and sorting,
> - KD-trees for multidimensional data,
> - Patricia tries (useful for prefix searches such as IP and telecom routing) and
> - Trigram indexes for text searches when the exact spelling of the target object is not precisely known,
> - Object-identifier (OID) with associated references provide direct data access and Autoid indexes support system-defined object identifiers.

> Rather than storing duplicate data, indexes contain only a reference to data, keeping memory requirements to an absolute minimum. Additionally, Voluntary indexes enable program control over population of the index.

> eXtremeSQL provides the SQL `create index` statement which supports the above index types and the complete range of SQL query techniques (with additional support for the `sequence` data type) through the `select` statement.

> ## Supported Data Types

> eXtremeDB supports the following data types:

> - 1, 2, 4, 8-byte signed/unsigned integers
> - boolean
> - float, double
> - date, time, datetime
> - char (fixed length)
> - string (variable length)
> - fixed-size array
> - vector (variable-length array)
> - structs (embedded to any depth)
> - binary large object (BLOB)
> - autoid (auto-incremented)
> - user-defined object-id (OID) and references
> - unicode (wchar)

> ## Debugging eXtremeDB Applications

> The eXtremeDB debug-mode run-time includes numerous traps in the database code, for detection and easy remediation of programming errors. The eXtremeDB-generated programming interface exploits the type-checking features of the compiler, with programmer mistakes generating a compile-time error.

> The entire eXtremeDB database runtime implementation is available with source code, for complete control of the development environment.

> ## Supported Development Environments

> Among the most popular development tools for eXtremeDB applications are the following :

> - gnu toolchain (gcc 4.1 and higher, clang, xlc, icc)
> - Tornado 2.0 and 2.2 (GNU and Diab compilers)
> - QNX Momentics IDE (qcc: C, C++, Embedded C++)
> - GreenHills Multi
> - Microsoft Visual Studio (C/C++, .NET Framework)
> - Eclipse
> - XCode