VistaDB 6 Released - .NET Core, Performance & Scalability Improvements and More!
VistaDB 6.0 is now available for download.
If you’re not familiar with the improvements coming with VistaDB 6, check out the following blog articles:
- What’s Coming in VistaDB 6
- Async / Await Support
- Faster Single Application Locks.
- Shortcut Execution
- Faster Low-level Storage
.NET Standard (and .NET Core!) Support
VistaDB 6 includes both .NET Framework and .NET Standard 2.0 versions of its engine. The .NET Standard engine can be used in nearly any platform that is based on .NET - an impressively wide range of frameworks from Android & iOS devices through Linux and on. This means you can create a single library of your own using VistaDB and include it, unmodified, on all those devices as well.
This pairs up well with the new Single Process locking modes and other performance improvements - making VistaDB a great choice for your next mobile application!
Performance Improvement for Real-world Applications
Grabbing Large Data Sets
Our goals for VistaDB 6 started with a simple performance problem: We weren’t scaling across multiple threads when users performed high volume queries. Take a simple example:
SELECT * FROM MY_BIG_TABLE
We traced the problem down to how many objects were being created and destroyed as the engine looked at each row. In effect, we didn’t scale across multiple threads because we were bound by the .NET Garbage Collector’s ability to release short-lived objects. So, the more threads you throw at it the worse the situation got, until your application didn’t make any progress at all!
We radically dropped the number of objects per column per row and in so doing picked up performance gains even for single threaded data access and scaled out to multiple far better than before.
Using Subqueries
VistaDB has always had a challenge with subqueries because it doesn’t have a query re-writer like SQL Server does to merge the subquery with the containing query. For version 6 we have taken a few steps to speed up subqueries in some common situations:
- Accelerated In Operations: It’s not uncommon to use a subquery to select a range of keys, e.g. IN (SELECT Key…). This had particularly severe performance problems in VistaDB previously and we’ve been able to accelerate by up to 50% in version 6!
- Multithreaded Queries: When useful, the engine will execute the subquery on a separate thread so it can be working to find the next matching row (or range of rows) while the containing query is working forward to the next set of matches.
Joins without Indexes
Now, we absolutely and enthusiastically recommend that all joins (and filtering!) should be done against indexes because there’s just no substitute for pre-calculated lookups. But, we’ve had customers show us interesting examples where that just wasn’t feasible. We’ve increased the throughput of un-optimized queries through not only low level storage layer improvements but also through carefully crafted comparison logic and cautious framework API usage. This is particularly touchy because it’s easy for comparisons to be done billions of times when joining modest-sized tables to the point where simple things like property accessors or stack frames can be substantial in execution times.
Getting the Upgrade
If you have active Upgrade Assurance as of 10/1/2019 then you’re entitled to version 6 at no additional cost. With a mature product like VistaDB, making sure we earn your annual renewal is the primary focus of our development team. We’re pleased to get 6 in your hands and are already laying out a roadmap from here!
If you don’t have active Upgrade Assurance, we offer special upgrade pricing to help you move from VistaDB 4 and 5 to version 6. If you’ve opted into release announcements from us you should have received a tailored email with upgrade instructions.
Update March 2021: VistaDB 6.1 Released!
With the release of VistaDB 6.1, we have added support for .NET 5! You can read more about the minor version update in this article.