Knowledge (XXG)

Extensible Storage Engine

Source 📝

665:
record itself, and not a logical pointer to the record. Secondary indexes have primary keys at their leaves to logically link to the record in the primary index. In other words, the table is physically clustered in primary index order. Retrieval of non-indexed record data in primary index order is generally much faster than in secondary index order. This is because a single disk access can bring into memory multiple records that will be access close together in time. The same disk access satisfies multiple record access operations. However, the insertion of a record into the middle of an index, as determined by the primary index order, may be very much slower than appending it to the end of an index. Update frequency must be carefully considered against retrieval patterns when performing table design. If no primary index is defined for a table, then an implicit primary index, called a database key (DBK) index is created. The DBK is simply a unique ascending number incremented each time a record is inserted. As a result, the physical order of records in a DBK index is chronological insertion order, and new records are always added at the end of the table. If an application wishes to cluster data on a non-unique index, this is possible by adding an autoincrement column to the end of the non-unique index definition.
839:
defining a single base table that contains data for two or more logical tables. The column set of the base table is the union of the column sets of these logical tables. Tagged columns make this possible because of their good handling of both multi-valued and sparse valued data. Since related data is stored together in the same record, it is accessed together thereby minimizing the number of disk accesses to perform the join. This process can be extended to a large number of logical tables as ESE can support up to 64,993 tagged columns. Since indexes can be defined over multi-valued columns, it is still possible to index ‘interior’ tables. However, some limitations exist and applications should consider pre-joining carefully before employing this technique.
754:
processing, and the outer transaction may yet fail. Changes are committed to the database only when the outermost transaction is committed. This is known as committing to transaction level 0. When the transaction commits to transaction level 0, data describing the transaction is synchronously flushed to the log to ensure that the transaction will be completed even in the event of a subsequent system crash. Synchronously flushing the log makes ESE transactions durable. However, in some cases application wish to order their updates, but not immediately guarantee that changes will be done. Here, applications can commit changes with JET_bitIndexLazyFlush.
647:
of an update. Multiple sessions may each have outstanding changes made via EscrowUpdate to the same value because ESE can determine the actual end value regardless of which transactions commit and which transactions rollback. This allows multiple users to concurrently update a column by making numeric delta changes. Optionally, database engine can erase records with zero value of the column. A common use for such escrow column is reference counter: many threads increment/decrement the value without locks, and when the counter reaches zero, the record automatically gets deleted.
421:. If an insert or update operation causes a page to overflow, the page is split: a new page is allocated and is logically chained in between the two previously adjacent pages. Since this new page is not physically adjacent to its logical neighbors, access to it is not as efficient. ESE has an on-line compaction feature that re-compacts data. If a table is expected to be frequently updated, space may be reserved for future insertions by specifying an appropriate page density when creating a table or index. This allows split operations to be avoided or postponed. 37: 277: 158: 621:
while tagged columns belong to the latter. The internal representation of the two column categories is different, and it is important to understand the trade offs between the column categories. Fixed and variable columns are typically represented in every record, even when the occurrence has a NULL value. These columns can be quickly addressed via an offset table. Tagged column occurrences are preceded by a column identifier and the column is located by binary searching the set of tagged columns.
813:
from a secondary index, than from the record, when navigating by the index. If the column data were retrieved from the record, then an additional navigation is necessary to locate the record by the primary key. This may result in additional disk accesses. When an index provides all columns needed then it is called a covering index. Note that columns defined in the table primary index are also found in secondary indexes and can be similarly retrieved using JET_bitRetrieveFromPrimaryBookmark.
804:
retrieval. Temporary tables can be used for partial and complete result sets as well. These tables can offer the same features as base tables including the ability to navigate sequentially or directly to rows using index keys matching the sort definition. Temporary tables can also be updatable for computation of complex aggregates. Simple aggregates can be computed automatically with a feature similar to sorting where the desired aggregate is a natural result of the sort process.
750:
invisible to a transaction. However, a transaction can update only data that has not changed in the meantime; else the operation fails at once without waiting. Read-only transactions never need to wait, and update transactions can interfere only with one another updating transaction. Transactions which are terminated by Rollback, or by a system crash, leave no trace on the database. In general, the data state is restored on Rollback to what it was prior to BeginTransaction.
774:
complete, the newly created index is available to all transactions and has entries for record updates made by other transactions that could not perceive the presence of the index when the updates took place. Data definition operations may be performed with all the features expected of the transaction mechanism for record updates. Data definition operations supported in this fashion include AddColumn, DeleteColumn, CreateIndex, DeleteIndex, CreateTable and DeleteTable.
852:
This type of recovery scheme is often referred to as a ‘roll-forward/roll-backward’ recovery scheme. Logs can be retained until the data is safely copied via a backup process described below, or logs can be reused in a circular fashion as soon as they are no longer needed for recovery from system crash. Circular logging minimizes the amount of disk space needed for the log but has implications on the ability to recreate a data state in the event of a media failure.
616:
approximately 4-bytes of space in addition to the size of the tagged column instance value. When the number of instances of a single tagged column is large, the overhead per tagged column instance is approximately 2-bytes. Tagged columns are ideal for sparse columns because they take no space whatsoever if they are not set. If a multi-valued tagged column is indexed, the index will contain one entry for the record for each value of the tagged column.
783:
table index. Many record and column operations are based on the cursor position. Cursor position can be moved sequentially by Move operations or directly using index keys with Seek operations. Cursors can also be moved to a fractional position within an index. In this way, the cursor can be quickly moved to a thumb bar position. This operation is performed with the same speed as a Seek operation. No intervening data must be accessed.
928:) and a v2 (JET Blue) that would conform to the same API specification (JET API). DAE became JET Blue for the color of the flag of Israel. BC7 ISAM became JET Red for the color of the flag of Russia. While JET Blue and JET Red were written to the same API specification, they shared no ISAM code whatsoever. They did both support a common query processor, QJET, which later together with the BC7 ISAM became synonymous with JET Red. 3962: 2135: 737:. They can be used for sub-strings longer than the maximum tuple length by dividing the search sub-string into maximum tuple length search strings and intersecting the results. They can be used for exact matches for strings as long as the maximum tuple length or as short as the minimum tuple length, with no index intersection. For more information on performing index intersection in ESE see 430:
with the exception of long value columns. Column types of LongText and LongBinary do not contribute significantly to this size limitation, and records can hold data much larger than a database page size when data is stored in long value columns. When a long value reference is stored in a record, only 9 bytes of in-record data are required. These long values may themselves be up to 2
787:
record can be copied into the copy buffer using the PrepareUpdate operation, and Update operations store the contents of the copy buffer as a record. The copy buffer is implicitly cleared on a transaction commit or rollback, as well as on navigation operations. RetrieveColumns may be used to retrieve column data either from the record or from the copy buffer, if one exists.
865:
Both the database and log files are check summed to ensure that no data corruptions exist within the data set during the backup process. Streaming backups may also be incremental backups. Incremental backups are ones in which only the log files are copied and which can be restored along with a previous full backup to bring all databases to a recent state.
826:
predicate satisfied by a single index. Any remaining predicate, called the residual predicate, is processed by applying the predicate to the record itself. This is a simple method but has the disadvantage of potentially having to perform many disk accesses to bring records into memory to apply the residual predicate.
830:
predicate can be applied. ESE makes this easy by supplying an IntersectIndexes operation. This operation accepts a series of index ranges on indexes from the same table and returns a temporary table of primary keys that can be used to navigate to the base table records that satisfy all index predicates.
847:
The logging and recovery feature of ESE supports guaranteed data integrity and consistency in the event of a system crash. Logging is the process of redundantly recording database update operations in a log file. The log file structure is very robust against system crashes. Recovery is the process of
812:
Retrieving column data directly from secondary indexes is an important performance optimization. Columns may be retrieved directly from secondary indexes, without accessing the data records, via the RetrieveFromIndex flag on the RetrieveColumns operation. It is much more efficient to retrieve columns
786:
Each cursor has a copy buffer in order to create a new record, or modify an existing record, column by column. This is an internal buffer whose contents can be changed with SetColumns operations. Modifications of the copy buffer do not automatically change the stored data. The contents of the current
682:
Indexes can also be defined to be sparse. Sparse indexes do not have at least one entry for each record in the table. There are a number of options in defining a sparse index. Options exist to exclude records from indexes when an entire index key is NULL, when any key segment is NULL or when just the
642:
Auto increment columns are automatically set by ESE such that the value contained in the column is unique for every record in the table. These columns, like version columns, cannot be set by the application. Auto increment columns are read only, and are automatically set when a new record is inserted
620:
For a given table, columns fall into one of two categories: those which either occur exactly once in each of the records, with possibly a few NULL values; and those which occur rarely, or which may have multiple occurrences in a single record. Fixed and variable columns belong to the former category,
864:
Streaming backup is a backup method where copies of all desired database files and the necessary log files are made during the backup process. File copies may be saved directly to tape or can be made to any other storage device. No quiescing of activity of any kind is required with streamed backups.
860:
Logging and recovery also play a role in protecting data from media failure. ESE supports on-line backup where one or more databases are copied, along with log files in a manner that does not affect database operations. Databases can continue to be queried and updated while the backup is being made.
769:
In addition, an advanced concurrency control feature known as escrow locking is supported by ESE. Escrow locking is an extremely concurrent update where a numeric value is changed in a relative fashion, i.e. by adding or subtracting another numeric value. Escrow updates are non-conflicting even with
664:
One index may be specified as the clustered, or primary, index. In ESE, the clustered index must be unique and is referred to as the primary index. Other indexes are described as non-clustered, or secondary, indexes. Primary indexes are different from secondary indexes in that the index entry is the
646:
Escrow columns can be modified via an EscrowUpdate operation. Escrowed updates are numeric delta operations. Escrow columns must be of type Long. Examples of numeric delta operations include adding 2 to a value or subtracting 1 from a value. ESE tracks the change in a value rather than the end value
413:
Tables have one or more indexes. There must be at least one clustered index for record data. When no clustered index is defined by the application, an artificial index is used which orders and clusters records by the chronological order of record insertion. Indexes are defined to persist interesting
396:
ESE databases are organized into groups called instances. Most applications use a single instance, but all applications can also use multiple instances. The importance of the instance is that it associates a single recovery log series with one or more databases. Currently, up to 6 user databases may
782:
A cursor is a logical pointer within a table index. The cursor may be positioned on a record, before the first record, after the last record or even between records. If a cursor is positioned before or after a record, there is no current record. It is possible to have multiple cursors into the same
757:
ESE supports a concurrency control mechanism called multi-versioning. In multi-versioning, every transaction queries a consistent view of the entire database as it was at the time the transaction started. The only updates it encounters are those made by it. In this way, each transaction operates as
749:
A transaction is a logical unit of processing delimited by BeginTransaction and CommitTransaction, or Rollback, operations. All updates performed during a transaction are atomic; they either all appear in the database at the same time or none appear. Any subsequent updates by other transactions are
429:
A record is an associated set of column values. Records are inserted and updated via Update operations and can be deleted via Delete operations. Columns are set and retrieved via SetColumns and RetrieveColumns operations, respectively. The maximum size of a record is 8110 bytes for 8 kilobyte pages
409:
A table is a homogeneous collection of records, where each record has the same set of columns. Each table is identified by a table name, whose scope is local to the database in which the table is contained. The amount of disk space allocated to a table within a database is determined by a parameter
939:
A Microsoft Exchange Web Blog entry stated that developers who have contributed to JET Blue include Cheen Liao, Stephen Hecht, Matthew Bellew, Ian Jose, Edward "Eddie" Gilbert, Kenneth Kin Lum, Balasubramanian Sriram, Jonathan Liem, Andrew Goodsell, Laurion Burchall, Andrei Marinescu, Adam Foxman,
871:
backups are a new high speed backup method. Shadow copy backups are dramatically faster because the copy is virtually made after a brief period of quiescing an application. As subsequent updates are made to the data, the virtual copy is materialized. In some cases, hardware support for shadow copy
753:
Transactions may be nested up to 7 levels, with one additional level reserved for ESE internal use. This means that a part of a transaction may be rolled back, without need to roll back the entire transaction; a CommitTransaction of a nested transaction merely signifies the success of one phase of
691:
Indexes can also be defined to include one entry for each sub-string of a Text or Long Text column. These indexes are called tuple indexes. They are used to speed queries with sub-string matching predicates. Tuple indexes can only be defined for Text columns. For example, if a Text column value is
673:
Indexes can be defined over multi-valued columns. Multiple entries may exist in these indexes for records with multiple values for the indexed column. Multi-valued columns may be indexed in conjunction with single valued columns. When two or more multi-valued columns are indexed together, then the
611:
Variable columns are essentially columns that take up a variable amount of space in each record in which they are set, depending upon the size of the particular column value. Variable columns take up 2-bytes to determine NULLity and size, and a variable amount of space in each record in which that
437:
Records are typically uniform in that each record has a set of values for the same set of columns. In ESE, it is also possible to define many columns for a table, and yet have any given record contain only a small number of non-NULL column values. In this sense, a table can also be a collection of
875:
Restore can be used to apply a single backup, or it can be used to apply a combination of a single full backup with one or more incremental backups. Further, any existing log files can be replayed as well to recreate an entire data set all the way up to the last transaction logged as committed to
851:
Transaction operations are logged and the log is flushed to disk during each commit to transaction level 0. This allows the recovery process to redo updates made by transactions which commit to transaction level 0, and undo changes made by transactions which did not commit to transaction level 0.
773:
ESE also extends transaction semantics from data manipulation operations to data definition operations. It is possible to add an index to a table and have concurrently running transactions update the same table without any transaction lock contention whatsoever. Later, when these transactions are
816:
Index keys are stored in normalized form which can be, in many cases, denormalized to the original column value. Normalization is not always reversible. For example, Text and Long Text column types cannot be denormalized. In addition, index keys may be truncated when column data is very long. In
655:
An index is a persisted ordering of records in a table. Indexes are used for both sequential access to rows in the order defined, and for direct record navigation based on indexed column values. The order defined by an index is described in terms of an array of columns, in precedence order. This
400:
A database is portable in that it can be detached from one running ESE instance and later attached to the same or a different running instance. While detached, a database may be copied using standard Windows utilities. The database cannot be copied while it is being actively used since ESE opens
838:
A join is a common operation on a normalized table design, where logically related data is brought back together for use in an application. Joins can be expensive operations because many data accesses may be needed to bring related data into memory. This effort can be optimized in some cases by
638:
Version columns are automatically incremented by ESE each time a record containing this column is modified via an Update operation. This column cannot be set by the application, but can only be read. Applications of version columns include being used to determine if an in-memory copy of a given
935:
services in Windows NT 3.5. It shipped again as the storage engine for Microsoft Exchange in 1996. Additional Windows services chose JET Blue as their storage technology and by 2000 every version of Windows began to ship with JET Blue. JET Blue was used by Active Directory and became part of a
923:
Work began on Data Access Engine (DAE) in March 1989 when Allen Reiter joined Microsoft. Over the next year a team of four developers worked for Allen to largely complete the ISAM. Microsoft already had the BC7 ISAM (JET Red) but began the Data Access Engine (DAE) effort to build a more robust
829:
Index intersection is an important query mechanism in which multiple indexes are used together to more efficiently process a complex restriction. Instead using only a single index, index ranges on multiple indexes are combined to result in a much smaller number of records on which any residual
770:
other concurrent escrow updates to the same datum. This is possible because the operations supported are commutable and can be independently committed or rolled back. As a result, they do not interfere with concurrent update transactions. This feature is often used for maintained aggregations.
629:
Column types of Long Text and Long Binary are large binary objects. They are stored in separate B+tree from the clustered index keyed by long value id and byte offset. ESE supports append, byte range overwrite, and set size for these columns. Also, ESE has a single instance store feature where
825:
Queries often involve a combination of restrictions on data. An efficient means of processing a restriction is to use an available index. However, if a query involves multiple restrictions then applications often process the restrictions by walking the full index range of the most restrictive
615:
Tagged columns are columns that take no space whatsoever if they are not set in a record. They may be single valued but can also be multi-valued. The same tagged column may have multiple values in a single record. When tagged columns are set in a record, each instance of a tagged column takes
384:
structure. These pages contain meta-data to describe the data contained within the database, data itself, indexes to persist interesting orders of the data, and other information. This information is intermixed within the database file but efforts are made to keep data used together clustered
936:
special set of Windows code called the Trusted Computing Base (TCB). The number of Microsoft applications using JET Blue continues to grow and the JET Blue API was published in 2005 to facilitate usage by an ever-increasing number of applications and services both within and beyond Windows.
803:
ESE provides a sort capability in the form of temporary tables. The application inserts data records into the sort process one record at a time, and then retrieves them one record at a time in sorted order. Sorting is actually performed between the last record insertion and the first record
607:
Fixed columns are essentially columns that take up the same amount of space in each record, regardless of their value. Fixed columns take up a 1-bit to represent NULLity of the column value and a fixed amount of space in each record in which that column, or a later defined fixed column, is
336:
is maintained even in the event of a system crash. Transactions in ESE are highly concurrent making ESE suitable for server applications. ESE caches data intelligently to ensure high performance access to data. In addition, ESE is lightweight making it suitable for auxiliary applications.
656:
array of columns is also called the index key. Each column is called an index segment. Each index segment may be either ascending or descending, in terms of its ordering contribution. Any number of indexes may be defined for a table. ESE provides a rich set of indexing features.
441:
ESE supports a wide range of columns values, ranging in size from 1-bit to 2 GB. Choosing the correct column type is important because the type of a column determines many of its properties, including its ordering for indexes. The following data types are supported by ESE:
876:
transaction level 0. Restoration of a backup can be made to any system capable of supporting the original application. It need not be the same machine, or even the same machine configuration. Location of files can be changed as part of the restoration process.
888:
size is stored with the database. The physical sector size is expected to remain consistent between sessions; otherwise, an error is reported. When a physical drive is cloned or restored from a drive image to a drive that uses a different physical sector size
758:
though it was the only active transaction running on the system, except in the case of write conflicts. Since a transaction may make changes based on data read that has already been updated in another transaction, multi-versioning by itself does not guarantee
1102: 630:
multiple records may reference the same large binary object, as though each record had its own copy of the information, i.e. without inter-record locking conflicts. The maximum size of a Long Text or Long Binary column value is 2 GB.
924:
database engine as an entry in the then new client-server architecture realm. In the spring of 1990, BC7 ISAM and DAE teams were joined to become the Joint Engine Technology (JET) effort; responsible for producing two engines a v1 (
2178: 643:
into a table via an Update operation. The value in the column remains constant for the life of the record, and only one auto increment column is allowed per table. Auto increment columns may be of type Long or type Currency.
1060:"Acronis Products: Applications Build on ESENT Running on Windows Vista, Windows Server 2008 and Windows 7 may not work correctly after restoring or cloning to a drive with different physical sector | Knowledge Base" 414:
orders of data, and allow both sequential access to records in index order, and direct access to records by index column values. Clustered indexes in ESE must also be primary, meaning that the index key must be unique.
861:
The backup is referred to as a ‘fuzzy backup’ because the recovery process must be run as part of backup restoration to restore a consistent set of databases. Both streaming and shadow copy backup are supported.
683:
first key segment is NULL. Indexes can also have conditional columns. These columns never appear within an index but can cause a record not to be indexed when the conditional column is either NULL or non-NULL.
1078:"Applications that are built on ESENT and that run on a Windows Vista-based or Windows Server 2008-based computer may not work correctly after the reported physical sector size of the storage device changes" 766:
can be achieved when desired by simply using explicit record read locks to lock read data that updates are based upon. Both read and write locks may be explicitly requested with the GetLock operation.
920:(WINS) and a host of other Microsoft services, applications and Windows components. For years, it was a private API used by Microsoft only, but has since become a published API that anyone can use. 639:
record needs to be refreshed. If the value in a table record is greater than the value in a cached copy then the cached copy is known to be out of date. Version columns must be of type Long.
3994: 1271: 376:
A database is both a physical and logical grouping of data. An ESE database looks like a single file to Windows. Internally the database is a collection of 2, 4, 8, 16, or 32
896:
This is a known issue and Microsoft has hot fixes available. For Windows Vista or Windows Server 2008 see KB2470478. For Windows 7 or Windows Server 2008 R2 see KB982018.
696:, and the index is configured to have a minimum tuple size of 4 characters and a maximum tuple length of 10 characters, then the following sub-strings will be indexed: 795:
ESE applications invariably query their data. This section of the document describes features and techniques for applications to write query procession logic on ESE.
1180: 674:
multi-valued property is only honored for the first multi-value column in the index. Lower precedence columns are treated as though they were single valued.
2579: 1264: 3052: 2169: 1924: 4009: 2538: 2252: 3989: 2917: 2768: 2528: 1671: 2553: 2543: 2518: 1666: 3999: 3934: 3643: 2662: 2138: 1318: 1257: 817:
cases where columns cannot be retrieved directly from secondary indexes, the record can always be accessed to retrieve the necessary data.
1120: 58: 401:
database files exclusively. A database may physically reside on any device supported for directly addressable I/O operations by Windows.
2821: 1396: 3668: 2713: 2685: 2612: 2288: 1226: 255: 3383: 2912: 2889: 80: 3468: 4004: 3965: 3853: 3688: 3463: 2950: 2864: 2584: 2438: 1960: 1815: 1567: 966:
JET Red makes best effort file recovery, while ESE has write ahead logging and snapshot isolation for guaranteed crash recovery.
3944: 3715: 3458: 2874: 2247: 2217: 1955: 1830: 1308: 3598: 3558: 3215: 3205: 2966: 2907: 2627: 1572: 1552: 1323: 969:
JET Red before version 4.0 supports only page-level locking, while ESE and JET Red version 4.0 supports record-level locking.
963:
JET Red is a file sharing technology, while ESE is designed to be embedded in a server application, and does not share files.
1199: 1103:"An update that improves the compatibility of Windows 7 and Windows Server 2008 R2 with Advanced Format Disks is available" 3782: 3428: 3358: 3200: 3064: 2778: 1950: 1520: 1508: 1406: 917: 1540: 3885: 3698: 3578: 3563: 3488: 3045: 2902: 2773: 2763: 2751: 2162: 1919: 1863: 410:
given when the table is created with the CreateTable operation. Tables grow automatically in response to data creation.
137: 3929: 3663: 3538: 3473: 3014: 2927: 2879: 2011: 1945: 1835: 1820: 1587: 1184: 932: 1077: 51: 45: 3703: 3388: 2756: 2523: 2490: 2324: 1868: 1723: 872:
backups means that actually saving the virtual copies is unnecessary. Shadow copy backups are always full backups.
3984: 3693: 3603: 3220: 3078: 2746: 2548: 2242: 2237: 2212: 2049: 1858: 1825: 1577: 1364: 603:
Each ESE table can define up to 127 fixed length columns, 128 variable length columns and 64,993 tagged columns.
357: 306: 62: 3939: 3880: 3787: 3720: 3418: 3245: 3083: 2723: 2511: 2475: 1875: 1636: 1344: 981: 913: 759: 397:
be attached to an ESE instance at any time. Each separate process using ESE may have up to 1024 ESE instances.
3478: 3182: 3156: 3038: 3009: 2994: 2971: 2718: 2708: 2642: 2155: 2117: 1295: 380:
pages (16 and 32 KB page options are only available in Windows 7 and Exchange 2010), arranged in a balanced
322: 1525: 3240: 3126: 2675: 2670: 2652: 2622: 2480: 2192: 2100: 1986: 1631: 1498: 1453: 329: 25: 980:. ESE does not ship with a query engine but instead relies on applications to write their own queries as 3949: 3618: 3583: 3503: 3270: 2940: 2859: 2854: 2407: 2319: 2222: 2044: 1701: 1661: 1485: 1438: 1418: 912:, but was never used in this role. Instead, it went on to be used by Exchange Server, Active Directory, 1243: 741:. Tuple indexes cannot speed queries where the search string is shorter than the minimum tuple length. 3438: 3318: 2741: 2443: 2392: 2293: 2232: 1901: 1880: 1771: 1728: 365: 361: 325:. Its purpose is to allow applications to store and retrieve data via indexed and sequential access. 3872: 3413: 3161: 3136: 2816: 2799: 2700: 2607: 2346: 2016: 1423: 1411: 956: 925: 905: 353: 276: 227: 3725: 3638: 3608: 3250: 3146: 3111: 3030: 2387: 2227: 1914: 1909: 1853: 1641: 1433: 1359: 1303: 190: 733:
Even though tuple indexes can be very large, they can significantly speed queries of the form:
3828: 3760: 3613: 3568: 3483: 3353: 3280: 2999: 2869: 2811: 2637: 2417: 2371: 2105: 1810: 1786: 1733: 1503: 1401: 341: 215: 183: 3895: 3433: 3141: 3131: 2470: 2356: 1981: 1798: 1374: 1029: 909: 333: 310: 239: 203: 178: 21: 1140: 3924: 3745: 3683: 3593: 3518: 3443: 3423: 3151: 2351: 2122: 1716: 1490: 1428: 1339: 890: 763: 232: 1233: 157: 146: 943:
In January 2021 Microsoft open sourced ESE. It was posted to GitHub with the permissive
3750: 3493: 3308: 3303: 3260: 3106: 2831: 2690: 2412: 2283: 2085: 1651: 1597: 1160: 318: 314: 3978: 3710: 3678: 3648: 3348: 3116: 2945: 2935: 2849: 2733: 2602: 2533: 2366: 2361: 1976: 1845: 1781: 1706: 1582: 1313: 3573: 3393: 3338: 3333: 3004: 2647: 2075: 1766: 1761: 1592: 1443: 345: 364:
shipped with only the 32-bit edition, as it was the only supported platform. With
3378: 1545: 3792: 3523: 3343: 3166: 3121: 2989: 2897: 2632: 2336: 2278: 2273: 2147: 1776: 1696: 1203: 944: 904:
JET Blue was originally developed by Microsoft as a prospective upgrade for the
885: 868: 848:
using this log to restore databases to a consistent state after a system crash.
244: 385:
together within the database. An ESE database may contain up to 2 pages, or 16
3858: 3833: 3808: 3363: 3275: 3255: 3230: 2617: 2558: 2422: 2341: 1646: 1621: 1609: 1604: 1379: 1249: 931:
JET Blue first shipped in 1994 as an ISAM for WINS, DHCP, and the now defunct
349: 107: 3838: 3755: 3633: 3448: 3403: 3368: 3313: 3061: 3019: 2080: 2059: 1805: 1535: 1125: 302: 211: 112: 348:, with native x64 version of the ESE runtime shipping with x64 versions of 1530: 1081: 418: 332:
data update and retrieval. A crash recovery mechanism is provided so that
3903: 3818: 3628: 3588: 3513: 3498: 3453: 3235: 3225: 2402: 2202: 2197: 2034: 1626: 1513: 1354: 996: 992: 988: 431: 390: 386: 377: 3735: 3653: 3623: 3553: 3528: 3408: 3328: 3265: 2844: 2839: 2804: 2680: 2506: 2448: 2397: 2314: 2298: 2039: 1793: 1756: 1711: 1656: 1614: 1463: 1458: 1369: 1059: 219: 207: 955:
While they share a common lineage, there are vast differences between
3908: 3776: 3533: 3508: 3373: 3323: 2458: 2331: 2054: 1391: 1384: 1237: 977: 381: 199: 171: 3848: 3823: 3730: 3658: 3548: 3210: 2485: 2095: 2090: 1738: 1562: 1448: 1349: 195: 3843: 3673: 3398: 3298: 2574: 2453: 2257: 2207: 1929: 1748: 1557: 1017: 973: 301:(indexed sequential access method) data storage technology from 298: 3034: 2151: 1253: 972:
JET Red supports a wide variety of query interfaces, including
3740: 3543: 2783: 2110: 317:. It is also used by a number of Windows components including 30: 916:(FRS), Security Configuration Editor, Certificate Services, 1161:"Microsoft Open Sources ESE, the Extensible Storage Engine" 417:
Clustered and non-clustered indexes are represented using
3917: 3894: 3871: 3801: 3769: 3289: 3191: 3175: 3099: 3092: 3071: 2980: 2959: 2926: 2888: 2830: 2792: 2732: 2699: 2661: 2593: 2567: 2499: 2431: 2380: 2307: 2266: 2185: 2068: 2025: 2004: 1969: 1938: 1900: 1893: 1844: 1747: 1689: 1680: 1478: 1332: 1294: 1285: 250: 238: 226: 189: 177: 167: 136: 118: 106: 98: 991:, while ESE has a maximum database file size of 8 552:8-byte date-time (integral date, fractional time) 340:The ESE Runtime (ESENT.DLL) has shipped in every 884:When an ESENT database is created, the physical 592:Large ANSI or Unicode string, length < 2 GB 576:ANSI or Unicode string, length <= 255 bytes 987:JET Red has a maximum database file size of 2 3046: 2163: 1265: 940:Ivan Trindev, Spencer Low and Brett Shirley. 8: 3995:Microsoft application programming interfaces 1200:"Understanding Information Store Essentials" 93: 3096: 3053: 3039: 3031: 2822:Security Support Provider Interface (SSPI) 2170: 2156: 2148: 1897: 1686: 1291: 1272: 1258: 1250: 634:Version, auto-increment and escrow columns 275: 156: 92: 81:Learn how and when to remove this message 1925:Business Intelligence Development Studio 1030:"Extensible Storage Engine Architecture" 880:Backup and restore to different hardware 698: 449: 44:This article includes a list of general 2253:Windows Advanced Rasterization Platform 1244:Extensible Storage Engine - CodeProject 1009: 738: 2248:DirectX Graphics Infrastructure (DXGI) 735:find all records containing “JET Blue” 584:Large binary string, length < 2 GB 568:Binary string, length <= 255 bytes 778:Cursor navigation and the copy buffer 7: 3935:Microsoft Open Specification Promise 3644:Text Template Transformation Toolkit 3065:free and open-source software (FOSS) 368:, it ships with the 64-bit edition. 999:pages, and 16 TiB with 8 KiB pages. 893:Drives), ESENT will report errors. 2714:Microsoft Foundation Classes (MFC) 2686:Distributed Component Object Model 669:Indexing over multi-valued columns 599:Fixed, variable and tagged columns 50:it lacks sufficient corresponding 14: 3961: 3960: 3854:TPM 2.0 Reference Implementation 3689:Windows Communication Foundation 3464:Microsoft Automatic Graph Layout 2134: 2133: 35: 3945:Open Source Security Foundation 3716:Windows Presentation Foundation 3459:Managed Extensibility Framework 2017:Team Foundation Version Control 4010:Software using the MIT license 3599:Python Tools for Visual Studio 3559:Open Management Infrastructure 3469:Microsoft C++ Standard Library 2724:Windows Template Library (WTL) 464:ternary value (NULL, 0, or 1) 1: 3990:Formerly proprietary software 2719:Active Template Library (ATL) 2439:Data Access Components (MDAC) 2179:Microsoft APIs and frameworks 1049:In this context 1 TB = 1024 B 918:Windows Internet Name Service 544:8-byte floating-point number 536:4-byte floating-point number 3886:Microsoft Reciprocal License 3564:Open Neural Network Exchange 3489:Microsoft Enterprise Library 1016:In this context 1 KB = 1024 4000:Microsoft database software 3664:Virtual File System for Git 3539:Neural Network Intelligence 3474:Microsoft Cognitive Toolkit 3015:Multilingual User Interface 2941:Dynamic Data Exchange (DDE) 1280:Microsoft development tools 1141:"Extensible Storage Engine" 1121:"Extensible Storage Engine" 124:; 30 years ago 4026: 843:Logging and crash recovery 799:Sorts and temporary tables 560:16-byte unique identifier 270:/extensible-storage-engine 268:/extensible-storage-engine 153:/Extensible-Storage-Engine 15: 3958: 3814:Extensible Storage Engine 3694:Windows Driver Frameworks 3604:R Tools for Visual Studio 3479:Microsoft Design Language 3079:Microsoft and open source 2466:Extensible Storage Engine 2243:Windows Imaging Component 2238:Windows Image Acquisition 2131: 1992:Extensible Storage Engine 1397:Robotics Developer Studio 1234:Extensible-Storage-Engine 307:Microsoft Exchange Server 287:Extensible Storage Engine 94:Extensible Storage Engine 3940:Open Letter to Hobbyists 3881:Microsoft Public License 3779:(v1.25, v2.0 & v4.0) 3721:Windows Template Library 3419:Dynamic Language Runtime 3084:Shared Source Initiative 1816:Communication Foundation 914:File Replication Service 520:8-byte unsigned integer 504:4-byte unsigned integer 488:2-byte unsigned integer 472:1-byte unsigned integer 4005:Microsoft free software 3157:Windows Package Manager 3010:Language Interface Pack 2995:Text Services Framework 2709:Framework Class Library 2118:Windows Package Manager 1831:Presentation Foundation 762:transactions. However, 438:heterogeneous records. 323:Help and Support Center 65:more precise citations. 3930:F# Software Foundation 2653:Common Log File System 2481:Access Database Engine 2193:Desktop Window Manager 2101:Web Platform Installer 1987:Access Database Engine 1454:Native Image Generator 1319:Tools for Applications 1181:"Exchange Terminology" 528:8-byte signed integer 512:8-byte signed integer 496:4-byte signed integer 480:2-byte signed integer 26:Access Database Engine 3950:Outercurve Foundation 3504:Mixed Reality Toolkit 2981:Text and multilingual 1107:support.microsoft.com 951:Comparison to JET Red 305:. ESE is the core of 3439:Fluent Design System 3319:.NET Micro Framework 2967:Active Accessibility 2233:Windows Color System 1729:Xbox Development Kit 1314:Team System Profiler 3162:WorldWide Telescope 3137:Microsoft PowerToys 3005:Input method editor 2817:Data Protection API 2608:Windows Script Host 2347:Image Mastering API 1836:Workflow Foundation 1821:Identity Foundation 1407:SharePoint Designer 908:database engine in 425:Records and columns 354:Windows Server 2003 95: 3726:Windows UI Library 3639:T2 Temporal Prover 3609:RecursiveExtractor 3271:Small Basic Online 3147:Windows Calculator 2903:Enterprise Library 2890:Software factories 2594:Administration and 2524:Filtering Platform 2325:Video Acceleration 1434:Windows App Studio 856:Backup and restore 821:Index intersection 739:Index Intersection 358:Microsoft Exchange 210:(and historically 20:storage engine of 3972: 3971: 3867: 3866: 3770:Operating systems 3761:Z3 Theorem Prover 3569:Open Service Mesh 3484:Microsoft Detours 3354:ASP.NET Web Forms 3292:development tools 3028: 3027: 3000:Text Object Model 2812:Windows CardSpace 2638:Windows Installer 2372:Video for Windows 2145: 2144: 2106:Windows Installer 2012:Visual SourceSafe 2000: 1999: 1920:Management Studio 1889: 1888: 1734:Windows Installer 1474: 1473: 1163:. 3 February 2021 834:Pre-joined tables 731: 730: 694:“I love JET Blue” 660:Clustered indexes 596: 595: 517:UnsignedLongLong 293:), also known as 284: 283: 184:Microsoft Windows 91: 90: 83: 4017: 3985:Database engines 3964: 3963: 3434:Entity Framework 3132:Open Live Writer 3097: 3055: 3048: 3041: 3032: 2613:WMI (extensions) 2471:Entity Framework 2357:Media Foundation 2208:D3D (extensions) 2172: 2165: 2158: 2149: 2137: 2136: 1982:Microsoft Access 1898: 1799:Entity Framework 1687: 1324:Tools for Office 1292: 1274: 1267: 1260: 1251: 1246: 1230: 1229: 1227:Official website 1214: 1212: 1211: 1202:. Archived from 1195: 1193: 1192: 1183:. Archived from 1172: 1171: 1169: 1168: 1157: 1151: 1150: 1148: 1147: 1137: 1131: 1130: 1117: 1111: 1110: 1099: 1093: 1092: 1090: 1089: 1080:. Archived from 1074: 1068: 1067: 1056: 1050: 1047: 1041: 1040: 1038: 1037: 1026: 1020: 1014: 910:Microsoft Access 808:Covering indexes 791:Query processing 699: 450: 334:data consistency 311:Active Directory 280: 279: 272: 269: 267: 265: 263: 261: 259: 257: 179:Operating system 160: 155: 152: 150: 148: 132: 130: 125: 96: 86: 79: 75: 72: 66: 61:this article by 52:inline citations 39: 38: 31: 22:Microsoft Access 4025: 4024: 4020: 4019: 4018: 4016: 4015: 4014: 3975: 3974: 3973: 3968: 3954: 3925:.NET Foundation 3913: 3890: 3863: 3797: 3765: 3746:XDP for Windows 3684:Windows App SDK 3444:Fluid Framework 3424:eBPF on Windows 3291: 3285: 3193: 3187: 3171: 3152:Windows Console 3088: 3067: 3059: 3029: 3024: 2982: 2976: 2955: 2922: 2884: 2826: 2788: 2728: 2695: 2663:Component model 2657: 2643:Error Reporting 2595: 2589: 2563: 2495: 2427: 2418:SideBar Gadgets 2376: 2352:Managed DirectX 2303: 2262: 2186:Graphics and UI 2181: 2176: 2146: 2141: 2127: 2123:Microsoft Store 2064: 2050:Script Debugger 2027: 2021: 1996: 1965: 1934: 1885: 1840: 1743: 1717:Managed DirectX 1682: 1676: 1470: 1429:Windows App SDK 1365:Macro Assembler 1328: 1287: 1281: 1278: 1242: 1225: 1224: 1221: 1209: 1207: 1206:on June 9, 2007 1198: 1190: 1188: 1179: 1176: 1175: 1166: 1164: 1159: 1158: 1154: 1145: 1143: 1139: 1138: 1134: 1119: 1118: 1114: 1101: 1100: 1096: 1087: 1085: 1076: 1075: 1071: 1058: 1057: 1053: 1048: 1044: 1035: 1033: 1028: 1027: 1023: 1015: 1011: 1006: 953: 902: 891:Advanced Format 882: 858: 845: 836: 823: 810: 801: 793: 780: 764:serializability 747: 726: 724: 722: 720: 718: 716: 714: 712: 710: 708: 706: 703: 689: 680: 671: 662: 653: 636: 627: 601: 485:Unsigned Short 448: 427: 407: 389:of data, for 8 374: 274: 254: 233:Database engine 163: 145: 128: 126: 123: 119:Initial release 87: 76: 70: 67: 57:Please help to 56: 40: 36: 29: 12: 11: 5: 4023: 4021: 4013: 4012: 4007: 4002: 3997: 3992: 3987: 3977: 3976: 3970: 3969: 3959: 3956: 3955: 3953: 3952: 3947: 3942: 3937: 3932: 3927: 3921: 3919: 3915: 3914: 3912: 3911: 3906: 3900: 3898: 3892: 3891: 3889: 3888: 3883: 3877: 3875: 3869: 3868: 3865: 3864: 3862: 3861: 3856: 3851: 3846: 3841: 3836: 3831: 3826: 3821: 3816: 3811: 3805: 3803: 3799: 3798: 3796: 3795: 3790: 3785: 3780: 3773: 3771: 3767: 3766: 3764: 3763: 3758: 3753: 3748: 3743: 3738: 3733: 3728: 3723: 3718: 3713: 3708: 3707: 3706: 3701: 3691: 3686: 3681: 3676: 3671: 3666: 3661: 3656: 3651: 3646: 3641: 3636: 3631: 3626: 3621: 3616: 3611: 3606: 3601: 3596: 3591: 3586: 3581: 3576: 3571: 3566: 3561: 3556: 3551: 3546: 3541: 3536: 3531: 3526: 3521: 3516: 3511: 3506: 3501: 3496: 3494:Microsoft SEAL 3491: 3486: 3481: 3476: 3471: 3466: 3461: 3456: 3451: 3446: 3441: 3436: 3431: 3426: 3421: 3416: 3411: 3406: 3401: 3396: 3391: 3386: 3381: 3376: 3371: 3366: 3361: 3356: 3351: 3346: 3341: 3336: 3331: 3326: 3321: 3316: 3311: 3309:.NET Gadgeteer 3306: 3304:.NET Framework 3301: 3295: 3293: 3287: 3286: 3284: 3283: 3278: 3273: 3268: 3263: 3261:Project Verona 3258: 3253: 3248: 3243: 3238: 3233: 3228: 3223: 3218: 3213: 3208: 3203: 3197: 3195: 3189: 3188: 3186: 3185: 3179: 3177: 3173: 3172: 3170: 3169: 3164: 3159: 3154: 3149: 3144: 3139: 3134: 3129: 3124: 3119: 3114: 3109: 3107:3D Movie Maker 3103: 3101: 3094: 3090: 3089: 3087: 3086: 3081: 3075: 3073: 3069: 3068: 3060: 3058: 3057: 3050: 3043: 3035: 3026: 3025: 3023: 3022: 3017: 3012: 3007: 3002: 2997: 2992: 2986: 2984: 2978: 2977: 2975: 2974: 2969: 2963: 2961: 2957: 2956: 2954: 2953: 2948: 2943: 2938: 2932: 2930: 2924: 2923: 2921: 2920: 2915: 2910: 2905: 2900: 2894: 2892: 2886: 2885: 2883: 2882: 2877: 2872: 2867: 2862: 2857: 2852: 2847: 2842: 2836: 2834: 2828: 2827: 2825: 2824: 2819: 2814: 2809: 2808: 2807: 2796: 2794: 2790: 2789: 2787: 2786: 2781: 2776: 2771: 2766: 2761: 2760: 2759: 2754: 2744: 2738: 2736: 2734:Device drivers 2730: 2729: 2727: 2726: 2721: 2716: 2711: 2705: 2703: 2697: 2696: 2694: 2693: 2691:.NET Framework 2688: 2683: 2678: 2673: 2667: 2665: 2659: 2658: 2656: 2655: 2650: 2645: 2640: 2635: 2630: 2625: 2623:Task Scheduler 2620: 2615: 2610: 2605: 2599: 2597: 2591: 2590: 2588: 2587: 2582: 2577: 2571: 2569: 2565: 2564: 2562: 2561: 2556: 2551: 2546: 2541: 2536: 2531: 2526: 2521: 2519:Winsock Kernel 2516: 2515: 2514: 2503: 2501: 2497: 2496: 2494: 2493: 2488: 2483: 2478: 2476:Sync Framework 2473: 2468: 2463: 2462: 2461: 2456: 2451: 2446: 2435: 2433: 2429: 2428: 2426: 2425: 2420: 2415: 2410: 2405: 2400: 2395: 2390: 2384: 2382: 2378: 2377: 2375: 2374: 2369: 2364: 2359: 2354: 2349: 2344: 2339: 2334: 2329: 2328: 2327: 2322: 2311: 2309: 2305: 2304: 2302: 2301: 2296: 2291: 2286: 2284:DirectX plugin 2281: 2276: 2270: 2268: 2264: 2263: 2261: 2260: 2255: 2250: 2245: 2240: 2235: 2230: 2225: 2220: 2215: 2210: 2205: 2200: 2195: 2189: 2187: 2183: 2182: 2177: 2175: 2174: 2167: 2160: 2152: 2143: 2142: 2132: 2129: 2128: 2126: 2125: 2120: 2115: 2114: 2113: 2103: 2098: 2093: 2088: 2083: 2078: 2072: 2070: 2066: 2065: 2063: 2062: 2057: 2052: 2047: 2042: 2037: 2031: 2029: 2023: 2022: 2020: 2019: 2014: 2008: 2006: 2005:Source control 2002: 2001: 1998: 1997: 1995: 1994: 1989: 1984: 1979: 1973: 1971: 1967: 1966: 1964: 1963: 1958: 1953: 1948: 1942: 1940: 1936: 1935: 1933: 1932: 1927: 1922: 1917: 1912: 1906: 1904: 1895: 1891: 1890: 1887: 1886: 1884: 1883: 1878: 1873: 1872: 1871: 1866: 1856: 1850: 1848: 1846:Device drivers 1842: 1841: 1839: 1838: 1833: 1828: 1823: 1818: 1813: 1808: 1803: 1802: 1801: 1791: 1790: 1789: 1784: 1779: 1774: 1769: 1764: 1753: 1751: 1745: 1744: 1742: 1741: 1736: 1731: 1726: 1721: 1720: 1719: 1709: 1704: 1699: 1693: 1691: 1684: 1678: 1677: 1675: 1674: 1669: 1664: 1659: 1654: 1652:Project Verona 1649: 1644: 1639: 1634: 1629: 1624: 1619: 1618: 1617: 1612: 1602: 1601: 1600: 1595: 1585: 1580: 1575: 1570: 1565: 1560: 1555: 1550: 1549: 1548: 1543: 1538: 1533: 1523: 1518: 1517: 1516: 1511: 1506: 1501: 1493: 1488: 1482: 1480: 1476: 1475: 1472: 1471: 1469: 1468: 1467: 1466: 1461: 1456: 1451: 1446: 1436: 1431: 1426: 1421: 1416: 1415: 1414: 1404: 1399: 1394: 1389: 1388: 1387: 1377: 1372: 1367: 1362: 1357: 1352: 1347: 1345:Expression Web 1342: 1336: 1334: 1330: 1329: 1327: 1326: 1321: 1316: 1311: 1306: 1300: 1298: 1289: 1283: 1282: 1279: 1277: 1276: 1269: 1262: 1254: 1248: 1247: 1240: 1231: 1220: 1219:External links 1217: 1216: 1215: 1196: 1174: 1173: 1152: 1132: 1112: 1094: 1069: 1064:kb.acronis.com 1051: 1042: 1021: 1008: 1007: 1005: 1002: 1001: 1000: 985: 970: 967: 964: 952: 949: 901: 898: 881: 878: 857: 854: 844: 841: 835: 832: 822: 819: 809: 806: 800: 797: 792: 789: 779: 776: 746: 743: 729: 728: 688: 685: 679: 678:Sparse indexes 676: 670: 667: 661: 658: 652: 649: 635: 632: 626: 623: 618: 617: 613: 612:column is set. 609: 600: 597: 594: 593: 590: 586: 585: 582: 578: 577: 574: 570: 569: 566: 562: 561: 558: 554: 553: 550: 546: 545: 542: 538: 537: 534: 530: 529: 526: 522: 521: 518: 514: 513: 510: 506: 505: 502: 501:Unsigned Long 498: 497: 494: 490: 489: 486: 482: 481: 478: 474: 473: 470: 469:Unsigned Byte 466: 465: 462: 458: 457: 454: 447: 444: 434:(GB) in size. 426: 423: 406: 403: 373: 370: 344:release since 319:Windows Update 315:Windows Search 282: 281: 252: 248: 247: 242: 236: 235: 230: 224: 223: 193: 187: 186: 181: 175: 174: 169: 165: 164: 162: 161: 142: 140: 134: 133: 120: 116: 115: 110: 104: 103: 100: 89: 88: 43: 41: 34: 13: 10: 9: 6: 4: 3: 2: 4022: 4011: 4008: 4006: 4003: 4001: 3998: 3996: 3993: 3991: 3988: 3986: 3983: 3982: 3980: 3967: 3957: 3951: 3948: 3946: 3943: 3941: 3938: 3936: 3933: 3931: 3928: 3926: 3923: 3922: 3920: 3916: 3910: 3907: 3905: 3902: 3901: 3899: 3897: 3893: 3887: 3884: 3882: 3879: 3878: 3876: 3874: 3870: 3860: 3857: 3855: 3852: 3850: 3847: 3845: 3842: 3840: 3837: 3835: 3832: 3830: 3827: 3825: 3822: 3820: 3817: 3815: 3812: 3810: 3807: 3806: 3804: 3800: 3794: 3791: 3789: 3786: 3784: 3781: 3778: 3775: 3774: 3772: 3768: 3762: 3759: 3757: 3754: 3752: 3749: 3747: 3744: 3742: 3739: 3737: 3734: 3732: 3729: 3727: 3724: 3722: 3719: 3717: 3714: 3712: 3711:Windows Forms 3709: 3705: 3702: 3700: 3697: 3696: 3695: 3692: 3690: 3687: 3685: 3682: 3680: 3679:Vowpal Wabbit 3677: 3675: 3672: 3670: 3667: 3665: 3662: 3660: 3657: 3655: 3652: 3650: 3647: 3645: 3642: 3640: 3637: 3635: 3632: 3630: 3627: 3625: 3622: 3620: 3617: 3615: 3612: 3610: 3607: 3605: 3602: 3600: 3597: 3595: 3592: 3590: 3587: 3585: 3582: 3580: 3577: 3575: 3572: 3570: 3567: 3565: 3562: 3560: 3557: 3555: 3552: 3550: 3547: 3545: 3542: 3540: 3537: 3535: 3532: 3530: 3527: 3525: 3522: 3520: 3517: 3515: 3512: 3510: 3507: 3505: 3502: 3500: 3497: 3495: 3492: 3490: 3487: 3485: 3482: 3480: 3477: 3475: 3472: 3470: 3467: 3465: 3462: 3460: 3457: 3455: 3452: 3450: 3447: 3445: 3442: 3440: 3437: 3435: 3432: 3430: 3427: 3425: 3422: 3420: 3417: 3415: 3412: 3410: 3407: 3405: 3402: 3400: 3397: 3395: 3392: 3390: 3387: 3385: 3382: 3380: 3377: 3375: 3372: 3370: 3367: 3365: 3362: 3360: 3357: 3355: 3352: 3350: 3349:ASP.NET Razor 3347: 3345: 3342: 3340: 3337: 3335: 3332: 3330: 3327: 3325: 3322: 3320: 3317: 3315: 3312: 3310: 3307: 3305: 3302: 3300: 3297: 3296: 3294: 3288: 3282: 3279: 3277: 3274: 3272: 3269: 3267: 3264: 3262: 3259: 3257: 3254: 3252: 3249: 3247: 3244: 3242: 3239: 3237: 3234: 3232: 3229: 3227: 3224: 3222: 3219: 3217: 3214: 3212: 3209: 3207: 3204: 3202: 3199: 3198: 3196: 3190: 3184: 3181: 3180: 3178: 3174: 3168: 3165: 3163: 3160: 3158: 3155: 3153: 3150: 3148: 3145: 3143: 3140: 3138: 3135: 3133: 3130: 3128: 3125: 3123: 3120: 3118: 3117:Conference XP 3115: 3113: 3110: 3108: 3105: 3104: 3102: 3098: 3095: 3091: 3085: 3082: 3080: 3077: 3076: 3074: 3070: 3066: 3063: 3056: 3051: 3049: 3044: 3042: 3037: 3036: 3033: 3021: 3018: 3016: 3013: 3011: 3008: 3006: 3003: 3001: 2998: 2996: 2993: 2991: 2988: 2987: 2985: 2979: 2973: 2972:UI Automation 2970: 2968: 2965: 2964: 2962: 2960:Accessibility 2958: 2952: 2949: 2947: 2944: 2942: 2939: 2937: 2934: 2933: 2931: 2929: 2925: 2919: 2916: 2914: 2911: 2909: 2906: 2904: 2901: 2899: 2896: 2895: 2893: 2891: 2887: 2881: 2878: 2876: 2873: 2871: 2868: 2866: 2863: 2861: 2858: 2856: 2853: 2851: 2848: 2846: 2843: 2841: 2838: 2837: 2835: 2833: 2829: 2823: 2820: 2818: 2815: 2813: 2810: 2806: 2803: 2802: 2801: 2798: 2797: 2795: 2791: 2785: 2782: 2780: 2777: 2775: 2772: 2770: 2767: 2765: 2762: 2758: 2755: 2753: 2750: 2749: 2748: 2745: 2743: 2740: 2739: 2737: 2735: 2731: 2725: 2722: 2720: 2717: 2715: 2712: 2710: 2707: 2706: 2704: 2702: 2698: 2692: 2689: 2687: 2684: 2682: 2679: 2677: 2674: 2672: 2669: 2668: 2666: 2664: 2660: 2654: 2651: 2649: 2646: 2644: 2641: 2639: 2636: 2634: 2631: 2629: 2628:Offline Files 2626: 2624: 2621: 2619: 2616: 2614: 2611: 2609: 2606: 2604: 2603:Win32 console 2601: 2600: 2598: 2592: 2586: 2583: 2581: 2580:Telephony API 2578: 2576: 2575:Messaging API 2573: 2572: 2570: 2568:Communication 2566: 2560: 2557: 2555: 2552: 2550: 2547: 2545: 2542: 2540: 2537: 2535: 2534:Windows Rally 2532: 2530: 2527: 2525: 2522: 2520: 2517: 2513: 2510: 2509: 2508: 2505: 2504: 2502: 2498: 2492: 2489: 2487: 2484: 2482: 2479: 2477: 2474: 2472: 2469: 2467: 2464: 2460: 2457: 2455: 2452: 2450: 2447: 2445: 2442: 2441: 2440: 2437: 2436: 2434: 2430: 2424: 2421: 2419: 2416: 2414: 2411: 2409: 2406: 2404: 2401: 2399: 2396: 2394: 2391: 2389: 2386: 2385: 2383: 2379: 2373: 2370: 2368: 2367:Windows Media 2365: 2363: 2360: 2358: 2355: 2353: 2350: 2348: 2345: 2343: 2340: 2338: 2335: 2333: 2330: 2326: 2323: 2321: 2320:Media Objects 2318: 2317: 2316: 2313: 2312: 2310: 2306: 2300: 2297: 2295: 2292: 2290: 2287: 2285: 2282: 2280: 2277: 2275: 2272: 2271: 2269: 2265: 2259: 2256: 2254: 2251: 2249: 2246: 2244: 2241: 2239: 2236: 2234: 2231: 2229: 2226: 2224: 2221: 2219: 2216: 2214: 2211: 2209: 2206: 2204: 2201: 2199: 2196: 2194: 2191: 2190: 2188: 2184: 2180: 2173: 2168: 2166: 2161: 2159: 2154: 2153: 2150: 2140: 2130: 2124: 2121: 2119: 2116: 2112: 2109: 2108: 2107: 2104: 2102: 2099: 2097: 2094: 2092: 2089: 2087: 2084: 2082: 2079: 2077: 2074: 2073: 2071: 2067: 2061: 2058: 2056: 2053: 2051: 2048: 2046: 2043: 2041: 2038: 2036: 2033: 2032: 2030: 2024: 2018: 2015: 2013: 2010: 2009: 2007: 2003: 1993: 1990: 1988: 1985: 1983: 1980: 1978: 1977:Visual FoxPro 1975: 1974: 1972: 1968: 1962: 1959: 1957: 1954: 1952: 1949: 1947: 1944: 1943: 1941: 1937: 1931: 1928: 1926: 1923: 1921: 1918: 1916: 1913: 1911: 1908: 1907: 1905: 1903: 1899: 1896: 1892: 1882: 1879: 1877: 1874: 1870: 1867: 1865: 1862: 1861: 1860: 1857: 1855: 1852: 1851: 1849: 1847: 1843: 1837: 1834: 1832: 1829: 1827: 1824: 1822: 1819: 1817: 1814: 1812: 1809: 1807: 1804: 1800: 1797: 1796: 1795: 1792: 1788: 1785: 1783: 1780: 1778: 1775: 1773: 1770: 1768: 1765: 1763: 1760: 1759: 1758: 1755: 1754: 1752: 1750: 1746: 1740: 1737: 1735: 1732: 1730: 1727: 1725: 1722: 1718: 1715: 1714: 1713: 1710: 1708: 1705: 1703: 1700: 1698: 1695: 1694: 1692: 1688: 1685: 1679: 1673: 1670: 1668: 1665: 1663: 1660: 1658: 1655: 1653: 1650: 1648: 1645: 1643: 1640: 1638: 1635: 1633: 1630: 1628: 1625: 1623: 1620: 1616: 1613: 1611: 1608: 1607: 1606: 1603: 1599: 1596: 1594: 1591: 1590: 1589: 1586: 1584: 1583:Visual FoxPro 1581: 1579: 1576: 1574: 1571: 1569: 1566: 1564: 1561: 1559: 1556: 1554: 1551: 1547: 1544: 1542: 1539: 1537: 1534: 1532: 1529: 1528: 1527: 1524: 1522: 1519: 1515: 1512: 1510: 1507: 1505: 1502: 1500: 1497: 1496: 1495:Visual Basic 1494: 1492: 1489: 1487: 1484: 1483: 1481: 1477: 1465: 1462: 1460: 1457: 1455: 1452: 1450: 1447: 1445: 1442: 1441: 1440: 1437: 1435: 1432: 1430: 1427: 1425: 1422: 1420: 1417: 1413: 1410: 1409: 1408: 1405: 1403: 1400: 1398: 1395: 1393: 1390: 1386: 1383: 1382: 1381: 1378: 1376: 1373: 1371: 1368: 1366: 1363: 1361: 1358: 1356: 1353: 1351: 1348: 1346: 1343: 1341: 1338: 1337: 1335: 1331: 1325: 1322: 1320: 1317: 1315: 1312: 1310: 1307: 1305: 1302: 1301: 1299: 1297: 1296:Visual Studio 1293: 1290: 1284: 1275: 1270: 1268: 1263: 1261: 1256: 1255: 1252: 1245: 1241: 1239: 1235: 1232: 1228: 1223: 1222: 1218: 1205: 1201: 1197: 1187:on 2008-11-09 1186: 1182: 1178: 1177: 1162: 1156: 1153: 1142: 1136: 1133: 1128: 1127: 1122: 1116: 1113: 1108: 1104: 1098: 1095: 1084:on 2015-02-28 1083: 1079: 1073: 1070: 1065: 1061: 1055: 1052: 1046: 1043: 1031: 1025: 1022: 1019: 1013: 1010: 1003: 998: 994: 990: 986: 983: 979: 975: 971: 968: 965: 962: 961: 960: 958: 950: 948: 946: 941: 937: 934: 929: 927: 921: 919: 915: 911: 907: 899: 897: 894: 892: 887: 879: 877: 873: 870: 866: 862: 855: 853: 849: 842: 840: 833: 831: 827: 820: 818: 814: 807: 805: 798: 796: 790: 788: 784: 777: 775: 771: 767: 765: 761: 755: 751: 744: 742: 740: 736: 727: 701: 700: 697: 695: 687:Tuple indexes 686: 684: 677: 675: 668: 666: 659: 657: 650: 648: 644: 640: 633: 631: 624: 622: 614: 610: 606: 605: 604: 598: 591: 588: 587: 583: 580: 579: 575: 572: 571: 567: 564: 563: 559: 556: 555: 551: 548: 547: 543: 540: 539: 535: 532: 531: 527: 524: 523: 519: 516: 515: 511: 508: 507: 503: 500: 499: 495: 492: 491: 487: 484: 483: 479: 476: 475: 471: 468: 467: 463: 460: 459: 455: 452: 451: 445: 443: 439: 435: 433: 424: 422: 420: 415: 411: 404: 402: 398: 394: 393:sized pages. 392: 388: 383: 379: 371: 369: 367: 366:Exchange 2007 363: 362:Exchange 2003 359: 355: 351: 347: 343: 338: 335: 331: 328:ESE provides 326: 324: 320: 316: 312: 308: 304: 300: 296: 292: 288: 278: 271: 253: 249: 246: 243: 241: 237: 234: 231: 229: 225: 221: 217: 213: 209: 205: 201: 197: 194: 192: 188: 185: 182: 180: 176: 173: 170: 166: 159: 154: 144: 143: 141: 139: 135: 121: 117: 114: 111: 109: 105: 101: 97: 85: 82: 74: 71:February 2021 64: 60: 54: 53: 47: 42: 33: 32: 27: 23: 19: 3813: 3649:TLA+ Toolbox 3574:Open XML SDK 3394:CLR Profiler 3339:ASP.NET Core 3334:ASP.NET AJAX 3281:Visual Basic 3127:File Manager 3100:Applications 2908:Composite UI 2465: 2393:RSS Platform 2076:Active Setup 1991: 1961:Notification 1939:SQL services 1772:Dynamic Data 1444:CLR Profiler 1288:environments 1208:. Retrieved 1204:the original 1189:. Retrieved 1185:the original 1165:. Retrieved 1155: 1144:. Retrieved 1135: 1124: 1115: 1106: 1097: 1086:. Retrieved 1082:the original 1072: 1063: 1054: 1045: 1034:. Retrieved 1024: 1012: 954: 942: 938: 930: 922: 903: 895: 883: 874: 867: 863: 859: 850: 846: 837: 828: 824: 815: 811: 802: 794: 785: 781: 772: 768: 760:serializable 756: 752: 748: 745:Transactions 734: 732: 713:“e JET Blue” 711:“ve JET Blu” 709:“ove JET Bl” 707:“love JET B” 705:“ love JET ” 704: 702:“I love JET” 693: 690: 681: 672: 663: 654: 645: 641: 637: 628: 619: 602: 581:Long Binary 541:IEEE Double 533:IEEE Single 456:Description 446:Column types 440: 436: 428: 416: 412: 408: 399: 395: 375: 346:Windows 2000 339: 327: 294: 290: 286: 285: 108:Developer(s) 77: 68: 49: 17: 3793:Azure Linux 3524:MonoDevelop 3344:ASP.NET MVC 3290:Frameworks, 3192:Programming 3176:Video games 3167:XML Notepad 3122:Family.Show 2990:DirectWrite 2898:EFx Factory 2855:Silverlight 2633:Shadow Copy 2432:Data access 2337:DirectInput 2279:DirectSound 2274:DirectMusic 2223:Silverlight 2026:Testing and 1956:Integration 1876:Windows HLK 1702:Silverlight 1697:Windows API 1662:Small Basic 1541:Managed C++ 1486:Dynamics AX 1439:Windows SDK 1419:Small Basic 1286:Development 945:MIT License 886:disk sector 869:Shadow copy 715:“ JET Blue” 625:Long values 321:client and 245:MIT License 99:Other names 63:introducing 3979:Categories 3859:WikiBhasha 3834:Project Mu 3809:ChronoZoom 3783:Barrelfish 3619:Sandcastle 3584:Playwright 3389:ChakraCore 3364:Babylon.js 3276:TypeScript 3256:PowerShell 3231:IronPython 3183:Allegiance 2800:Crypto API 2618:PowerShell 2596:management 2559:DirectPlay 2500:Networking 2423:TypeScript 2342:DirectShow 2308:Multimedia 2294:Speech API 2213:GDI / GDI+ 2045:Playwright 1902:SQL Server 1683:frameworks 1647:PowerShell 1622:IronPython 1610:TypeScript 1605:JavaScript 1526:Visual C++ 1380:QuickBASIC 1210:2007-06-18 1191:2015-08-20 1167:2021-02-05 1146:2008-12-19 1088:2014-11-19 1036:2007-06-18 1004:References 984:ISAM code. 717:“JET Blue” 589:Long Text 350:Windows XP 330:transacted 258:.microsoft 168:Written in 151:/microsoft 138:Repository 46:references 3839:ReactiveX 3756:xUnit.net 3669:Voldemort 3634:SVNBridge 3449:Infer.NET 3404:DeepSpeed 3379:C++/WinRT 3369:BitFunnel 3314:.NET MAUI 3194:languages 3062:Microsoft 3020:Uniscribe 2701:Libraries 2648:Event Log 2081:ClickOnce 2060:xUnit.net 2028:debugging 1951:Reporting 1811:CardSpace 1787:Web Forms 1568:Dexterity 1546:C++/WinRT 1479:Languages 1424:WebMatrix 1412:FrontPage 1126:Microsoft 1032:. TechNet 959:and ESE. 719:“ET Blue” 549:DateTime 525:Currency 509:LongLong 432:gigabytes 387:terabytes 372:Databases 303:Microsoft 212:DEC Alpha 113:Microsoft 3966:Category 3904:CodePlex 3873:Licenses 3819:FlexWiki 3629:StyleCop 3589:ProcDump 3514:mod_mono 3499:mimalloc 3454:LightGBM 3429:Electron 3359:Avalonia 3251:Power Fx 3236:IronRuby 3226:GW-BASIC 3142:Terminal 3093:Software 3072:Overview 2946:Remoting 2850:Remoting 2793:Security 2403:VBScript 2203:Direct3D 2198:Direct2D 2139:Category 2069:Delivery 2035:CodeView 1946:Analysis 1894:Database 1681:APIs and 1642:Power Fx 1627:IronRuby 1514:VBScript 1360:MACRO-80 1355:GW-BASIC 721:“T Blue” 419:B+ trees 391:kilobyte 360:, up to 297:, is an 295:JET Blue 264:/windows 191:Platform 102:JET Blue 3918:Related 3736:WinObjC 3654:U-Prove 3624:SignalR 3594:ProcMon 3579:Orleans 3554:OneFuzz 3529:MSBuild 3409:DiskSpd 3329:ASP.NET 2983:support 2845:ADO.NET 2840:ASP.NET 2805:CAPICOM 2681:ActiveX 2544:P2P API 2507:Winsock 2449:ADO.NET 2398:JScript 2315:DirectX 2299:XAudio2 2040:OneFuzz 1915:Compact 1910:Express 1794:ADO.NET 1757:ASP.NET 1712:DirectX 1615:JScript 1536:C++/CLI 1464:XAMLPad 1459:WinDiff 1370:MSBuild 1309:Express 995:with 4 957:JET Red 926:JET Red 906:JET Red 900:History 723:“ Blue” 651:Indexes 565:Binary 342:Windows 251:Website 240:License 220:PowerPC 208:Itanium 127: ( 59:improve 18:JET Red 3909:GitHub 3896:Forges 3829:Gollum 3777:MS-DOS 3614:Roslyn 3534:MsQuic 3509:ML.NET 3374:Blazor 3324:AirSim 3201:Bosque 2554:MS MPI 2459:OLE DB 2388:MSHTML 2332:Xinput 2055:WinDbg 1690:Native 1531:C++/CX 1521:Bosque 1504:VB.NET 1499:legacy 1402:Roslyn 1392:QuickC 1385:QBasic 1375:Pascal 1333:Others 1238:GitHub 978:OLE DB 725:“Blue” 477:Short 405:Tables 382:B-tree 313:, and 273:  266:/win32 262:/en-us 218:, and 200:x86-64 147:github 48:, but 24:, see 3849:TLAPS 3824:FourQ 3802:Other 3788:SONiC 3731:WinJS 3659:vcpkg 3549:NuGet 3414:Dryad 3211:Dafny 2936:MSRPC 2486:MSXML 2267:Audio 2228:WinUI 2096:vcpkg 2091:NuGet 1970:Other 1782:Razor 1739:WinUI 1563:Dafny 1491:BASIC 1449:ILAsm 1350:FxCop 1340:Blend 573:Text 557:GUID 493:Long 453:Name 196:IA-32 3844:SILK 3704:UMDF 3699:KMDF 3674:VoTT 3519:Mono 3399:Dapr 3299:.NET 3241:Lean 3112:Atom 2832:.NET 2769:NDIS 2764:WDDM 2757:UMDF 2752:KMDF 2676:COM+ 2549:MSMQ 2539:BITS 2529:NDIS 2454:ODBC 2289:XACT 2258:WinG 1930:MSDE 1869:UMDF 1864:KMDF 1826:LINQ 1806:MAUI 1767:AJAX 1762:Core 1749:.NET 1672:XAML 1632:Lean 1588:Java 1558:C/AL 1304:Code 976:and 974:ODBC 608:set. 461:Bit 352:and 299:ISAM 260:.com 256:docs 228:Type 216:MIPS 206:and 149:.com 129:1994 122:1994 16:For 3751:XSP 3741:WiX 3544:npm 3384:CCF 2951:WCF 2928:IPC 2918:CSF 2913:CCF 2875:WPF 2870:WCS 2865:WCF 2860:TPL 2784:VxD 2779:BDA 2774:UAA 2747:WDF 2742:WDM 2671:COM 2585:WCF 2512:LSP 2491:OPC 2444:ADO 2413:XDR 2408:BHO 2381:Web 2362:XNA 2218:WPF 2111:WiX 2086:npm 1881:WDM 1859:WDF 1854:WDK 1777:MVC 1724:UWP 1707:XNA 1667:VPL 1593:J++ 1509:VBA 1236:on 997:KiB 993:TiB 989:GiB 933:RPL 291:ESE 204:ARM 172:C++ 3981:: 3266:Q# 3221:F* 3216:F# 3206:C# 2880:WF 1657:Q# 1598:J# 1578:F* 1573:F# 1553:C# 1123:. 1105:. 1062:. 947:. 378:KB 356:. 309:, 214:, 202:, 198:, 3246:P 3054:e 3047:t 3040:v 2171:e 2164:t 2157:v 1637:P 1273:e 1266:t 1259:v 1213:. 1194:. 1170:. 1149:. 1129:. 1109:. 1091:. 1066:. 1039:. 1018:B 982:C 889:( 289:( 222:) 131:) 84:) 78:( 73:) 69:( 55:. 28:.

Index

Microsoft Access
Access Database Engine
references
inline citations
improve
introducing
Learn how and when to remove this message
Developer(s)
Microsoft
Repository
github.com/microsoft/Extensible-Storage-Engine
Edit this at Wikidata
C++
Operating system
Microsoft Windows
Platform
IA-32
x86-64
ARM
Itanium
DEC Alpha
MIPS
PowerPC
Type
Database engine
License
MIT License
docs.microsoft.com/en-us/windows/win32/extensible-storage-engine/extensible-storage-engine
Edit this on Wikidata
ISAM

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.