Starting with version 4, EasyTable gets SQL capabilities and takes the lead on single user BDE replacement database engines market.
History of my using of EasyTable started about two years ago with version 1.20. After only a month, AidAim Software introduced version 2.0. Another half year later a new version that supported single file database was released. Now, only 8 months later, a new improved and expanded version featuring SQL support, hit the road. Thus, I can say EasyTable truly is a dynamically developed product. I should also mention that AidAim Software is into developing its data compression and encryption family of products. All of the facts mentioned above make me think that this company, introduced to Delphi components market not so long ago, in late 2000 to be exact, rightfully holds its leading position among well known companies on developer tools market.
EasyTable is a compact database engine for Delphi/C++ Builder developed specifically to replace BDE in compact applications. EasyTable handles its own database format. For those of you who are really interested in detailed technical specification I recommend to visit the developer web site (http://www.aidaim.com/products/tet/tet_spec.php). As for me, in this review I will rather try to focus on the benefits that distinguish this product from its analogues drawing special attention to EasyTable features that were most useful in my work. I will also try to show how to use them on practice. You can find a lot of samples of standard actions in product documentation as well as several demos and utilities with source code even in trial version of the product. That is why I'll try to review the structural features of this product that does not lay on the surface and are commonly go unnoticed when first trying EasyTable.
EasyTable contains 4 components: TEasyTable, TEasyDatabase, TEasyQuery and TEasySession. TEasyTable is one of the most TTable compatible BDE replacements. It means that there is no need to learn using TEasyTable in process of your application creation, if you have the TTable experience. Plus TEasyTable has a wide range of additional capabilities, we'll discuss below.
First of all, I would like to note that EasyTable has everything you typically need when using local database engine: Filtering, Searching, Sorting and Master / Detail relationship. But let focus on product specific features. I'd like to mention full multiple index support. It means that numerous fields in a table may comprise an index. EasyTable supports auto-indexing and keeps all indexing transparent, i.e. there is no need to specify the name of each column to use as an index for a table, just set TEasyTable.CreateAutoindexes to True. EasyTable provides descending and ascending indexes, case-sensitive and insensitive indexes for string fields.
Another important product specific feature, I would like to draw your attention to, is calculated and lookup fields. Praise EasyTable developers who took a great effort to implement these functions of standard TTable in such a specialized database engine. This fact, once again, underlines how serious AidAim Software is when developing their products.
Another specific feature of the product is in-memory mode. EasyTable, being a real database engine, supports special operation mode similar to in-memory datasets. This mode is intended for speeding up processing of small tables. While using this mode an entire table is loaded into memory. You must be sure that your table is rather compact, otherwise using this mode may cause operation speed slowdown.
The next issue that I believe worth your attention is internationalization / localization and Unicode support. EasyTable uses current system locale for all text search and sorting functions making sure that you do not run into any application localization problems. It seems to me that the developers made a great job on this part of the product. For instance, when I was localizing one of my applications to Turkish I didn't run into sorting problems that are quite common for other similar database engines due to incorrect Windows codepage. It is apparent that a special care was taken of some specific Windows codepages issues when this software was developed.
Another aspect developed to certain degree is importing from and exporting to any data source. There are special TEasyTable.ImportTable and TEasyTable.ExportTable methods used for transferring data from and to any dataset. In case you have access to your database via BDE you can use DBTransfer visual tool, bundled with EasyTable. This utility comes with full source code. It can be used for developing your own conversion utility for automatic conversion of your old database to new EasyTable format if your application used BDE or any TTable analogue with its own database format. In any case DBTransfer utility enables you to migrate to EasyTable easily.
Yet another important issue I would like to focus on is a variety of built-in database recovery tools in case of hardware failure (God save you from this kind of problems, however some sort of insurance for such situations makes me more optimistic). EasyTable provides this insurance via TEasyTable. RepairTable and TEasyDatabase.RepairDatabase methods. These methods return both Boolean value representing success or failure of an operation and changes log. Basing on my experience I can assure you these functions do work! They saved my neck and my users' data couple of times: There was one situation, however, when these functions failed but AidAim support team really helped me out: those really devoted guys courteously agreed to manually extract the most important data from my broken database; everything was done within several hours and absolutely free of charge! Generalizing, I would say that this engine is built with reliability in mind (take the built-in automatic indexes repair mechanism as an example).
Some of very pleasing peculiarities of this product include Key and Range methods support as well as progress bar during potentially slow operations with the table data support. Besides, you can create string and wide string fields of any fixed length. Special attention should be drawn to built-in string routines library written in Assembler. This library implements advanced sorting algorithms and string comparison algorithms that work several times faster than analogue string routines available in Delphi.
Another unique feature of version 5.00 is ability to build a database directly into an executable file of your application. This way you can create something similar to self-extracting archive that include a database. This can come in real handy while creating read-only databases (e.g. a product catalogue for distribution on CD-ROM).
It would be unfair to bypass EasyTable limitation while reviewing a product. Any DBMS has its own limitations which defines its usage scope. The limitations and usage scope information is critical when you plan a database project. I would not dive into all the facts and numbers since the creator of EasyTable does not make a secret of the engine limitations, specifying all of them in specification mentioned above. I will only focus on the limitations that were most important for my projects. If you happen to have more than 4 billions records in a table or more than 4 billions fields you will probably need some other database engine. See for yourself whether 253 characters for a field name or index name is sufficient for your tasks. I haven't found any other significant limitation. As for SQL commands list supported by EasyTable, I will make a note on this matter below.
I would like to share my experience of using EasyTable on different volumes of data here. Well, to start with, I must say I haven't tested the database engine on million records databases since I simply don't have such amounts of data to use in my projects. I have tested EasyTable with several hundred thousand records databases, which is a reality for most of my projects, and the engine performed quite well. However, I must mention that I noticed certain speed drop when I switched from tens of thousands to hundreds. Basing on this, I would recommend EasyTable for use with databases with several tens of thousands of records or even more.
In further text I would try to focus on specific aspects that make EasyTable actually powerful and convenient database tool.
Being a full featured database engine (in comparison with in-memory datasets), Easy Table supports all standard types of BLOB fields. BLOB data compression is one of the important benefits of using EasyTable along with compact application size and no need for BDE, DLLs, OCX or any other external additions to your .exe file. TEasyTable offers 4 modes of BLOB data compression: None (no compression), Fastest (works best on large amounts of easily compressed data - ZLib algorithm used), Max (highest compression ratio for cases when operation speed is not critical) and Default (a compromise mode offering good compression ratio without actual slowdown) - last two modes use PPM algorithm. You can easily change BLOB data storage mode using TEasyTable.RestructureTable method. This multi-purpose method allows not only changing BLOB fields compression mode but also change BLOB fields storage parameters (for optimizing database size and their operation speed for your tasks). We will discuss this method in detail later on. Besides, compression mode can be set on table creation as well as it can be changed anytime later using SQL commands:
create table or alter table : blobcompressionlevel [none,max,default,fastest]
SQL functionality implemented in EasyTable deserves in-depth review. We'll get back to SQL issues in one of the paragraphs below.
EasyTable is capable of encrypting data. This is true both for separate tables by means of setting TEasyTable.Encrypted and TEasyTable.Password properties while creating a table and the entire database using TDatabase.Encrypted and TDatabase.Password properties. This flexible approach allows working with rather large databases without speed loss by grouping secret data in separate compact tables and saving time on bypassing data that does not require encryption (e.g. publicly available images in ftGraphic). Another great use of separate tables encryption approach is providing differentiated access to various data for multiple users. As with data compression, encryption mode can be switched on \ off and password can be changed at any time. If you are dealing with tables you use the smart TEasyTable.RestructureTable method for these purposes while in case of entire database TDatabase.ChangeEncryption method is used. Alternatively Create Table or Alter Table SQL commands can be used by supplying Password and NewPassword arguments. EasyTable uses 256-bit Rijndael encryption algorithm and protects all tables from being modified by CRC-32.
Single File Database
One of the key features of this engine is its capability to keep all database tables within one single file (with default extension of .edb; custom filename extension can be used as well) which is very convenient for most cases. There is another data format available where every table is stored in a separate file (*.dat contains all records and table header) while additional files are also created (*.idx contains indexes for table, *.bif contains blob fields headers, *.bdf contains blob data file). This second format can be used in certain cases to produce more compact databases.
TEasyDatabase component is intended for working both with several tables in single file and with several tables in one folder. Starting version 5.00, an advanced feature becomes available for configuring page organization of database, if you are using single file format, of course. It is provided by TEasyDatabase.DatabaseFileMode property that can be set to one of the following values: Compact, Normal or Large. Value Compact create a new database created with minimal page size, making an empty database take only 6 Kb. This mode allows saving disk space for small databases. Using Normal mode an empty database takes about 36 Kb while in Large mode this value is about 136 Kb. Large mode is recommended for use with databases with sizes of several megabytes and larger. It is intended for speeding up database operations on those large databases.
Starting with version 5.00, EasyTable gained another important capability - Multithread. A new component, TEasySession was introduced. This new feature broadens EasyTable usage scope making it possible to create web applications. For instance, you can use EasyTable for writing Internet applications such as ISAPI and NSAPI web server applications. Multithread is one of the features rarely available in local database engines while being usually a part of complex client-server solutions. This fact confirm that EasyTable is absolutely unique for its market cluster. What's most important a demo-application is bundled with EasyTable, illustrating web-applications creation capabilities of the product.
Standard. Everything this product has complies with SQL'92 standard. However, SQL commands support syntax, more convenient and habitual for many users of other systems (such as Oracle). For instance, you can create SQL request both using standard syntax:
SELECT substring(FString from 1 for 5) a, ID FROM jt1 ORDER BY ID
and in a more convenient way:
SELECT substring(FString, 1, 5) a, ID FROM jt1 ORDER BY ID
For your convenience string concatenation can be specified both using standard || and alternative + sign. You can also add operands of any types (e.g. integer) to strings. In that case other type operand will be converted to string type resulting in string value.
Subset. As most other analogue scope products EasyTable implements SQL'92 standard partially. The full list of supported SQL commands is available in product technical specification I mentioned before (available on AidAim Software web site). However, in comparison with similar products it has rich SQL possibilities. Besides select TEasyQuery offers insert, update, delete and DDL commands (create index, alter table, etc.) My opinion is that implemented SQL commands are sufficient for most common tasks. I was especially impressed by Join, Natural Join, Union, Intersect and Except (or Minus), which seldom present in analogue products while still being the part of many client-server DBMS and many users got used to them. Well, I'm glad there are such brave people on the market who create so functional solutions and I wish them luck in developing their great products!
What else can we dream of? I guess triggers would be nice but I frankly doubt that you will ever happen to use stored procedures for the goals EasyTable allows you to reach.
I must say that did not run full-scale speed-testing of this product for several reasons. First, it would take a lot of time. Second, full-scale speed-testing is impossible without comparison to competing products, which is not the goal of this article (I would have had to make at leas a brief review of each competing product rendering this article oversized). Third, I would not want to hear words of criticism and blames of affiliation with any vendor since any database speed-testing method is challengeable because there is no any universal method and can not be on principle.
However, I would like to recommend an article available at http://www.aidaim.com/articles/dbtests1.php to all comparison tests fans. The page offers source codes of the testing programs as well as the testing method that can be used as is or easily modified for your application requirements, which can be very useful if you are considering a BDE alternative for your needs. I ran those tests on my machine and I must say the results given in the mentioned article seemed very trustworthy. The testing method described in the article is comprehensive and rather sophisticated: I've read several third party tests based on it. However, let me share some issues I've noticed. First, the testing results data are given upon testing latest versions of the products available in June, 2001. Second, SQL operations haven't been tested. Third, all the tests were run on one single table that consisted of random generated dataset of only 10,000 records.
As I mentioned before, EasyTable seems to be an ideal solution for working with medium-sized databases (about several tens or hundreds thousands of records). However, it has some drawbacks. For instance, if the number of records is large enough the table opening time increases significantly which can have an effect in the work of your application. However, EasyTable has a workaround for this problem: just set TEasyTable.CacheEnabled property to False prior to opening a table. I'd like to note that EasyTable can be configured and fine tuned to speed up its operation and optimize disk space and memory usage. Tuning is described in corresponding section of EasyTable Developer's Guide, so you can enjoy the operation of this not only powerful, feature rich and fast but also flexible BDE replacement.
Utilities and Demos
There are several utilities bundled with EasyTable such as DBTransfer utility mentioned before which allows importing your table from and exporting to Paradox and DBase formats easily. The utility is capable of working with tables from any other datasource.
Let focus on EasyTable Manager, a visual tool for database management. Using this utility you can easily create and edit not only EasyTable databases but any table you wish. For example, you can import data from a file to a BLOB field and export data from a BLOB field to a file without writing a single line of code.
Besides, EasyTable has a lot of Demos so you can quickly try and evaluate this product on actual samples. All the utilities are coming with source code included, which means you will be able to start programming many typical parts of your application immediately.
Documentation: Comprehensive help system and EasyTable Tuning guide
EasyTable is an example of a well documented product. EasyTable Developer's Guide and EasyTable Reference, bundled with the product, are full of examples. Taking into account large amount of source code samples coming with EasyTable, familiarizing with the product is even simpler than with TDataset.
Of course, EasyTable works perfect with default settings. However, the advanced users will find flexible tools for optimizing operation speed, memory and disk space consumption. EasyTable Developer's Guide includes a separate section called 'Tuning and Optimization' devoted to configuring EasyTable for maximum productivity as well as for solving context specific tasks.
EasyTable is a perfect solution both as BDE replacement in ready single user application and for developing new compact applications or applications that operate databases without using BDE. EasyTable is a well documented product that simultaneously has functionality power and high speed of operation. It is both easy to start working with for newbies and flexibly configurable for professional use. Among major benefits one could expect using EasyTable are: high speed search and database operations, compact code compiled right into executable file of your application, compact single file database format, compression and encryption capability, multithreading plus the power and flexibility of SQL'92.
What else shall we dream of? A client-server version, may be? Well, as I heard from AidAim Software, this dream may come true pretty soon. The company scheduled its client-server DBMS called Accuracer Database System release on September 2003.