Tuesday, July 04, 2006

New PBXT Release 0.9.5: Smaller, Faster, Better...

The new release of PBXT is, in fact, smaller than the previous version. This is due to a major re-structuring of the code. The result is a more compact and direct implementation. With less code to execute and some major changes this version is also a lot faster.

The most significant change is that all files (except the transaction logs) are now associated with a particular table. All table related files begin with the name of the table, and can be easily identified. If a database is not being accessed you can copy a table by copying the associated files, or drop a table by deleting the files. However, the main reason for this change was to improve the speed of sequentially reading and writing.

Records are now divided into a fixed and a variable length component. The fixed length component is stored together with the handle in the record data file. The variable component is referenced by the handle and is stored in one of a number of data log files associated with the table.

This new format reduces the number of disk accesses needed to read, create and update a row significantly. Furthers details of changes in this version can be found in the release notes.

In this release I have also resolved almost all of the issues on my to-do list. This includes the items regarding auto-increment, caching, unique key checking and all the bugs reported so far.

The only feature still due for the Beta release in September is the 5.1 implementation which I will be working on next.

I would much appreciate any feedback, bug reports and performance test results!


Jonathan said...

Nice to hear there's progress being made. I'm off for vacation now, but will definitely try it out when I return!

Dmitry said...

Is there any start-up settings, i.e. for memory allocation, buffers, e.t.c ?

Paul McCullagh said...

Yes, there are settings for the 2 caches used by PBXT:

pbxt_index_cache_size (the Index Cache): The amount of memory PBXT uses to cache index data and row pointers. This is all the data in the files with the extensions '.xti' and '.xtr'. This cache is managed in blocks of 2K.

pbxt_record_cache_size (the Record Cache): The amount of memory PBXT uses to cache table row data (handles and records). This is all the data in the files with the extension '.xtd'.

By default they are both set to 32MB. This memory is only allocated if a database containing PBXT tables is opened.

Ronald Bradford said...

Great Stuff. I thought I had another week to prepare, I guess things are going well.

Ronald Bradford said...

Here are my steps to install and use PBXT in my Linux OS based on Paul's instructions.

Using PBXT 0.9.5

Dmitry said...

Tried sysbench oltp test on PBXT :) One thread works 10-20% faster than InnoDB, more than one didn't work - receiving "ALERT: failed to execute mysql_stmt_execute(): Err1030 Got error -1 from storage engine" error message. Is there any problem with transactions/multiple connections?

Dmitry said...

please disregard my previous message about error that happened during sysbench oltp test - I set too high values for cache sizes :)
However, sysbench still can't work with PBXT table correctly - if more than one thread is running, it throughs lots of errors "int tab_wait_for_rollback(m_table.cc:1808) -51: Record already updated, transaction aborted" into mysql error log... Yes, I checked transactions manually - works perfectly! :)