Just a quick note that i released 2.0.2; hamsterdb is now threadsafe.
It’s not yet concurrent and there’s only one big mutex for every Environment that you create. The next release will introduce a more fine-grained locking.
Also, a bug in the freelist was fixed therefore i recommend to update, even if you are not interested in thread-safety.
Boost is now required for building.
Files are available for download here: http://hamsterdb.com/download.
chris Coding, Databases, hamsterdb, Libraries
This release adds a few minor features like setting a custom path for log files and re-enabling approximate matching for use with Transactions. A few bugs were fixed as well.
New Features
Approximate matching now works if Transactions are enabled (only for ham_find)
Added new parameter HAM_PARAM_LOG_DIRECTORY to specify the directory where the log file and the journal files are stored
Bugfixes
Win32 release builds no longer crash when using Transactions
Win32: fixed build issue if HAM_DISABLE_COMPRESSION is defined (thanks, Andy Thalmann (http://www.softdev.ch))
hamsterdb 2.0.0 failed to load database files created with hamsterdb 1.x because of a bad version check
Fixed bug where HAM_ONLY_DUPLICATES was ignored when used in a Transaction (thanks, Mark Ruijter)
Other Changes
The internal ham_device_t structure was rewritten as a C++ class. If you use this structure to overwrite the device handling then you have to rewrite your code.
Now using the native Win32 API for os_pwrite and os_pread (thanks, Andy Thalmann (http://www.softdev.ch))
Added a public macro HAM_API_REVISION to allow users to programmatically distinguish between new and old interface of ham_txn_begin
Files are available for download here: http://hamsterdb.com/download.
chris Coding, Databases, hamsterdb, Libraries
Another stabilization release of the 2.0.0 branch – the last few known issues were fixed, and performance was improved.
The next release might already be the final 2.0.0 release. It will feature more performance improvements (i will get rid of the physical log for most of the transactional operations), more refactoring and most likely some small API changes. The file format will continue to be compatible to 1.x and the ABI will also be compatible (the header file will change, the library interface not.)
Everything’s available for download, including precompiled win32 libraries.
http://hamsterdb.com/download.
Even when 2.0 is stable i will continue to maintain 1.x over the next few years (at least).
chris Coding, hamsterdb, Libraries
This is a minor bug fix release.
The bug was a type conversion of the cache size to a 32bit value. If you use cache sizes > 2 GB then you should upgrade. If not then you can skip this release.
Get the new files here: here.
chris Coding, Databases, hamsterdb, Libraries
This is the latest stable release from the 1.1.x branch.
This release improves performance and scalability for databases with several million items by avoiding two expensive memcpy’s and a linked list traversal when aborting or committing transactions. If you do not use transactions then don’t bother, but if you do (and your database is big enough) then you should see a significant performance gain.
This release also fixes a bug when erasing extended keys caused an SMO (btree re-balancing). This bug was present since the beginning of time and it took 6 years till it was noticed.
A new function ham_cursor_get_record_size was introduced. The cache size is now a 64bit variable and can be > 4 GB. Large files were enabled on 32bit linux.
All listed issues were reported by (mostly) commercial licensees, including code to reproduce. Thanks for all the contributions!
As usual, everything’s available for download here: http://hamsterdb.com/download.
chris Coding, Databases, hamsterdb, Libraries
This is the first stabilization release of the new (unstable) 2.0.0 branch which re-implemented the Transaction handling. Several bugs were fixed, and most (all?) of the code was refactored. A C++ compiler is now required to compile hamsterdb. All new features and bug fixes of 1.1.14 (will be released soon) were merged. This release is not ready for production! There are still two tests that currently fail and fixing these requires me to rewrite most of ham_cursor_move. Also, some of the Transaction routines (esp. in combination with extended keys and/or duplicates) have performance issues. There will be at least two more stabilization releases till 2.0.0 is ready for production.
Sources and CHANGELOG are available for download here!
chris Coding, Databases, hamsterdb, Libraries
Another bugfix release on the “stable” development line. From the readme:
This release fixes a performance regression when aborting Transactions. During abort, hamsterdb tried to re-create pages from the transaction log, even if they were not modified in the current Transaction. This was correct but unnecessary and caused a performance drop.
Tarball and precompiled win32 binaries are available for download.
chris Coding, Databases, hamsterdb, Libraries
Done!! After about 10 months i finally finished re-implementing the Transaction support.It’s a bit ambitious to call it 2.0.0, but i think the new functionality is justifying a major version increase.
So what’s so great about the new release? So far not much. You can create an unlimited number of parallel Transactions, and they will not block each other. The isolation level is “READ COMMITTED”. But the changes have been so big that i cannot guarantee as much stability as i’d like to do. And actually there are some known issues – a couple of tests are currently failing and performance is slow. Why did i still release? The failing tests show some weaknesses of the current implementation. Some routines have to be rewritten from scratch, and some modules need serious refactoring. But after 10 months i was really eager to release this beast and i really did not want to wait another 4 or 8 weeks.
The failing issues are described in the README file.
If you want to get an idea of the changes then look at the TODO list. It’s long. Really long.
Please treat this release as a “technical preview”. It will require one or two more releases till it’s ready for production. But comments are VERY welcome!
chris Coding, Databases, hamsterdb, Libraries
History repeating – another bugfix release was necessary.
1.1.11 had an issue in the cache purge routines – they were called, but they never completed successfully. This is now fixed – the memory consumption is now stable.
In addition, i exported a few internal functions that help me keep track of memory consumption, I/O behavior and performance. Every acceptance test will now create metrics like the following:
[OK] ../../testfiles/1/200.tst
perf-misc 0.010000 sec
perf-insert 0.048000 sec
perf-erase 0.008000 sec
perf-find 0.000000 sec
perf-cursor 0.000000 sec
perf-total 0.066000 sec
mem-num-allocs 400
mem-peak-bytes 84913 bytes
mem-total-bytes 86449 bytes
io-num-flushes 2
io-num-read 0
io-num-read-page 1
io-num-write 0
io-num-write-page 8
io-num-alloc 0
io-num-alloc-page 6
In total there are more than 45000 tests. A few perl scripts are helping me to pick out tests that have regressions. I hope that will avoid the necessity for releases like this one and the two previous ones.
All files are available for download here!
chris Coding, Databases, hamsterdb, Libraries
This is a bugfix release for 1.1.10.
When using transactions, 1.1.10 would sometimes flush the file handles even if HAM_WRITE_THROUGH is not enabled. This caused a performance regression of up to 30%.
In addition to this bugfix, i removed the ./configure switch “–enable-internal”. It was a relict from older times and did not make sense anymore. All “internal” functions (i.e. ham_check_integrity) are now always compiled.
In addition, my acceptance test suite (which was extended to ~ 45000 tests in the meantime) is now also tracking the performance. It already had profiling built-in, but the performance results were not stored. Such a regression should hopefully never happen again.
All files are available for download here!
chris Coding, Databases, hamsterdb, Libraries