v2.1.0 #5069
jarohen
announced in
Announcements
v2.1.0
#5069
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Such a lot to tell you about since our 2.0 release!
As always, see the milestone for the full list of issues closed and PRs merged. Thank you to everyone who's been involved in this release, whether that be by raising issues, helping us repro, helping us benchmark or contributing code - it's massively appreciated 🙏 Particular thanks go out to our clients and Design Partners, who once again have been heavily involved in the direction of XTDB, as well as providing invaluable real-world testing and feedback.
I'd also like to give a special mention to Jacob O'Bryant, who has very kindly contributed an OLTP benchmark based on his Yakread dataset and workload. This has been hugely helpful in guiding our performance work for 2.1 and beyond - working with him, we've already been able to land significant OLTP gains here as a result. Thank you Jacob!
"Multi-DB"
2.1 brings a significant (but still largely backwards-compatible) change to the architecture of XTDB - the introduction of secondary databases!
The database in XT has always been the combination of two core, shared components: a transaction log, and an object-store. This change allows one XTDB node to index and reference multiple tx-logs and object-stores.
Specifically, this decoupling of databases (storage) and clusters (compute) enables a data-mesh architecture - organise your databases around business domains (orders, customers, products), while each application team runs their own XTDB compute cluster. Teams can attach secondary databases to access shared domain data, aligning your data model with your organization's structure while keeping compute independent.
Queries can span multiple databases, enabling powerful cross-domain analytics and insights:
We've even made a small scale-factor TPC-H data-set available for you to play with using our 'Play' UI
For more information, and how to get started attaching secondary databases, see 'Databases in XTDB'.
We're really keen to see what you build with this - we think it's a really powerful way to decouple your data and applications.
This has meant a couple of minor breaking configuration changes - see:
Additionally, we've made some changes to repeatable queries to support multiple databases:
WATERMARK->AWAIT_TOKEN- see 'Transaction consistency'SNAPSHOT_TOKENin addition toSNAPSHOT_TIME- we'd recommend using the former for repeatable queries where possible.Our current roadmap for this feature is as follows (usual 'subject to change' caveat):
Client driver support
We've been hard at work improving the support for XTDB through language-native PostgreSQL drivers - we now support ten languages: C/C++, C#, Clojure, Elixir, Go, Java, Kotlin, Node.js, PHP, Python and Ruby.
See 'Language Drivers' for the up-to-date list, and also our 'driver-examples' repository.
OpenID Connect (OIDC) authentication
2.1 adds support for OpenID Connect (OIDC) authentication to XTDB's built-in authentication system - you can now configure XTDB to authenticate users via an OIDC provider, such as Keycloak, Auth0, or Okta. This is likely to become the primary authentication method in XTDB going forward, so that users can leverage existing identity infrastructure rather than attempting to mirror and maintain roles in XTDB.
We'll be adding support for more OIDC authentication methods, as well as OIDC-based authorization/role-mapping in future releases.
See OIDC for more information and how to get started.
Observability
We've heard your feedback regarding observability in XTDB loud and clear, and so 2.1 brings a number of improvements here.
XTDB now supports OpenTelemetry-backed tracing for query introspection and performance analysis. Traces are sent via the OTLP (OpenTelemetry Protocol) HTTP endpoint to your tracing backend (e.g., Grafana Tempo, Jaeger, etc).
Tracing provides detailed introspection into query execution, including:
See the tracing guide for details on how to get started.
Within the database itself, we've made the
EXPLAINplans much prettier, and addedEXPLAIN ANALYZE, which provides detailed timing information for each step of the query plan:Stability/Performance
All that said, the majority of our work in 2.1 has been focused on the stability and performance of XT. As is so often the case with these things, the progress here has been very much incremental - too many small changes to document here (see the milestone for the full list), but with a cumulatively significant effect.
Particularly, we've recently been focusing on a 'deterministic simulation testing' framework, which has already unearthed a handful of otherwise-hard-to-repro concurrency bugs/race conditions. XT already has an advantage here in that the vast majority of critical code is single-threaded, so we don't see the same class of locking/concurrency issues as other databases, but this framework has still been very helpful in improving confidence in XT's correctness under load.
We've also seen some impressive numbers in our internal benchmarks for both OLAP and OLTP queries - look out for future blog posts with more details!
Specifically, we've implemented disk-based joins using a 'grace hash join' algorithm. Previously, XTDB would hold entire join results in memory - fine for most workloads, but not so great when you're joining very large relations.
In 2.1, if a join grows too large to fit in memory, we'll automatically spill partitions to disk and continue processing. This means you can now run those massive analytical queries without worrying about OOM errors.
Other breaking changes
If you've any questions or thoughts, please do get in touch - we'd love to hear from you!
James, Jeremy and the XTDB team
This discussion was created from the release v2.1.0.
Beta Was this translation helpful? Give feedback.
All reactions