| Why Valentina is Better? |
|
Valentina is a cross-platform, object-relational SQL/API database system designed to provide a generational step in database superlatives: exceptional performance, modern database model and a complete set of integrated tools for development and management of database enabled applications. This document gives a brief description of Valentina benefits. Extremely High PerformanceThe primary contributions to Valentina performance are following: Valentina organizes data on disk in columns (so called vertical format)Values of a table field are stored as columns (arrays), in contrast to storing table fields as rows. When a query needs to access only a few columns of a table, then only those columns needed are read from disk. In contrast, in a row-oriented database, all values in a table are usually read from disk. Vertical storage formating is completely transparent to users. A Valentina user works with a standards-compliant SQL interface, or optionally using the API of a supported programming language. Migration of existing relational databases to Valentina requires no changes to most standard SQL queries or to database schema. To gain even better performance however, developers will want to take advantage of Valentina unique features.
Powerful IndexesValentina uses several types of indexes to get the best results: smaller size on disk and faster work. Valentina does not use B-tree indexes like most databases available. Valentina itself is able to choose the best type of index. You can create indexes based on calculated fields; you can even create indexes by using any valid Valentina SQL expression on single field or combination of fields to get the best results. Bitset CalculationsValentina was originally developed and optimized to use bitsets for resolving queries. Many Algorithm Branches.There are many possible combinations of algorithms for solving any one database task. There is usually a general algorithm that works for most common database tasks; there are others that are more specialized for performing specific tasks, which are optimized for performance, unlike the general one. A part of the Valentina specification is to provide as many variations as possible for achieving the greatest performance gain. Advanced CacheValentina have very advanced, highly optimized cache. One of its advantages is optimization to reduce disk I/O overhead.
Advanced SQL OptimizerValentina has and advanced SQL optimizer, which choose the best way to resolve SQL queries. Pool of QueriesValentina utilizes pools of queries to significantly improve performance of cached queries. This feature works transparently. If you send to Valentina a query that is byte-to-byte the same as some other query stored in the pool, then Valentina extract from pool compiled form of query and execute it immediately. Advanced Client/Server ProtocolValentina Server utilize a packet-based protocol, while many popular DBMS use stream-based protocol. Packets allow to solve many tasks in effective way. In particular, we can compress packets itself, what is not possible with data streams. This can reduce the network traffic in 7-10 times, increasing performance. Stored ProceduresValentina offers you stored procedures by syntax close to SQL92 standard. Using stored procedures you can develop business logic, which will be executed on server side, dramatically reducing network overhead.
Valentina Database ModelAlthough we emphasize again and again about the incredible speed of Valentina, Valentina initially was engineered to introduce a new paradigm of database development and management. The first step in database design is to design the logical model of the database structure. Some database developers use an ER model, others UML. In either case, you define objects with attributes and Links between objects. For example: Object Person and Object Phone linked as Many to Many by link with “Has”. When you finish the logical design you then need to implement it in the physical model of a database system. If you are implementing this in a relational database, you then translate your logical model as tables - and not much else except tables. In other words: you have links in your logical model? Sorry. Convert them into Tables. You have properties of objects? Sorry. Convert them into Tables. You have collections of objects? Sorry. Convert them into Tables. Database developers actually try to mirror the real world - and the real world contains objects with properties, relationships (links) between objects, state of objects, processes in time, and so on. This is why, we believe that a next generation DBMS should be armed with a model that easily and effectively mirrors objects and links of real world (as well as other entities). Another important paradigm in Valentina is evolution. C++ compilers are able also compile older programs written in C; so in the Valentina database model, you should be able use existing relational databases. This is why Valentina database is referred to as an Object-Relational (OR) database. Beyond support for relational models, the new Valentina paradigm also provides: RecID fieldEvery Valentina table has this field. Each record when created gets its own RecID, which is never changed. RecID takes up no disk space, in contrast to regular PK on ULONG field. A table with a million records in other databases need: DATA : million * 4 bytes = 4MB This feature lets you avoid the creation and overhead of artificial Primary Keys in tables - reducing disk space, improving speed, and reducing development time.
OID Fieldll Valentina tables have OID fields, with the exception of RecID fields. This field contains an 8 bytes LLONG value, which is unique in the scope of the whole database. This field was inspired by the pure OODBMS model. The huge advantage of Valentina solution is that this OID field again consumes no disk space. Compare to million table for other dbs, will need: DATA : million * 8 bytes = 8MB A new abstraction “Link”Valentina currently supports three types of links:
Big advantage of supporting different link types is that developer can work with them using the same API interface I_Link, I_Link2 or SQL commands. Foreign Key LinkRDBMS use a Foreign Key as a constraint. These are applied to values of some field (FK) of a child table, with set of actions that the RDBMS must execute ON UPDATE or ON DELETE of parent record. As a result, RDBMS are able provide consistency of values in FK and Primary Key fields. ObjectPtr Link/FieldObjectPtr is a special kind of Field, which is also a 1:M type link. It is similar to Foreign Key in usage, but more simple and more effective. It points not to a primary key of the parent table, but to its RecID field. Joins on ObjectPtr links can be 4 times faster than Foreign Key-based joins, because, as described above, RecID fields has ZERO disk-weight. Binary LinkBinary Link is unique feature of Valentina engine that provides a special structure to store links between two tables of M:M type. Link RefactoringProvides easy way to convert one link type to another using single SQL command. Properties of Schema ObjectsYou can define your own persistent properties of Tables, Fields, Links and other objects of database schema. For example, you may want assign a COLOR to each table in your application.
Smarter SQLBecause Valentina knows much more info about objects and links stored in a database schema, Valentina is able do much more smart job resolving SQL queries. In particular, you can write more short SQL commands, and Valentina still will be able resolve them correctly. Compare these SQL commands RDBMS: SELECT Person.* Valentina: SELECT Person.* As you can see Valentina do not require from you type each time like a monkey how to link tables Person and Phone. Really, Valentina already knows links between these two tables, and is smart enough to self find default way. Valentina Database ArchitectureMost commercial databases only provide one of the following:
In contrast, Valentina can work with local and remote databases using the same sources. To resolve this task, we have design Valentina engine using C++ interfaces (similar to COM or CORBA technologies):
As result we have come to three main DLLs: VSHARED.DLL, VKERNEL.DLL and VCLIENT.dll.
Thanks to such design, you can develop applications that are:
Valentina ToolsThe Valentina product line includes integrated tools to develop database-enabled applications. Valentina ADK - Application Development Kit.ADKs plug Valentina DB into the most modern, popular programming languages and platforms: C++, .NET, Objective C, COM, VB, REALbasic, Director, PHP, Ruby, Revolution, ... These are provided as a 4th DLL linked to VSHARED, and weak linked to VKERNEL and VCLIENT. ADKs expose public Valentina APIs to programming languages as sets of classes or methods. Valentina SERVERValentina Server is available on Windows/Linux/MAC OS X. This provides multi-user access to Valentina databases. The three versions of Valentina Server include:
Valentina STUDIOValentina Studio a GUI application that allows you to manage local and remote Valentina databases. You can modify database structure. You can analyze your structure in trees, columns and diagrams. You can add/update/delete records, do searches using SQL and non-SQL methods. There are numerous other useful features to manage your databases and servers. Valentina REPORTSValentina Reporting Services are available in different products. Valentina Studio Pro offers you a professional Report Editor where you can design layout of reports and test them. All your reports can optionally be stored in a single Valentina Project file (*.vsp). After designing a report, a developer can use them directly in an application via Valentina ADK API or upload them under Valentina Server; application(s) will get reports produced on the server side using the same ADK API. TEAM WORKBecause the Valentina Project format is supported under Valentina Server, several developers/users can connect to it from VStudio PRO or from applications in order to work on the same project. Who Should Use Valentina?Use Valentina if you need one of this or combination of this:
Where to Read More?
|