Now Reading
2.x Early Entry · XTDB

2.x Early Entry · XTDB

2023-04-27 14:42:17

XTDB is a bitemporal and dynamic relational database for SQL and Datalog.

XTDB 2.x continues to be work-in-progress and at present unreleased software program (alpha launch coming quickly!). Present documentation:

Need to strive it rapidly proper now?

Scroll all the way down to learn how below!

About 2.x Early Entry

This 2.x Early Entry programme offers visibility for customers who’re within the broad way forward for XTDB. Growing within the open permits us to course of suggestions sooner and ship on our guarantees sooner. This additionally signifies that many issues we intend to implement or repair previous to Basic Availability (and even an alpha launch) will at present produce opaque error messages, undocumented bugs, and a usually unreliable expertise. Please be forgiving!

XTDB 1.x will stay supported for the foreseeable future – we are going to proceed to triage 1.x points and supply releases nicely past 2.x Basic Availability.

Early Entry will proceed till we’re glad that the efficiency and deployment of two.x is strong sufficient to advocate for manufacturing utilization.
It will require intently collaborating with companions and customers who’re ready to check and provides suggestions on our bleeding edge adjustments. to assist? Get in contact!

Key Options of XTDB 2.x

  • Cloud native: fashionable columnar structure constructed round Apache Arrow and commodity object storage.
  • Bitemporal: all information is precisely versioned as updates are made (system time), and all information exists inside a common area timeline for representing ‘validity”https://www.xtdb.com/”effectivity’ (legitimate time).
  • Dynamic: no upfront schema must be specified earlier than data might be inserted. Advanced and nested information is robotically represented utilizing Apache Arrow varieties.
  • Relational: the complete spectrum of conventional SQL database capabilities is out there – together with joins, transactions, bag/multiset semantics, three-valued logic, a number of N-ary relations and many others.
  • SQL: unrestricted accessibility for a mainstream viewers and an eye fixed to the long run with preliminary Flight SQL driver assist.
  • Datalog: programmer-friendly API for complicated relational querying that overcomes a lot of SQL’s compositional challenges.

Take a look at our detailed What is XTDB breakdown to study extra about what makes XTDB particular. ✨

Issues you may strive proper now:

Be happy to combine and match the SQL and Datalog snippets – they’re interoperable!

In case you have any points with these particular examples, please tell us: hello@xtdb.com

Set up

By way of Docker or as a JVM library

;; deps.edn
{:mvn/repos {"ossrh-snapshots" {:url "https://s01.oss.sonatype.org/content material/repositories/snapshots"}}
 :deps {org.clojure/clojure {:mvn/model "1.11.1"}
        com.xtdb.labs/xtdb-api {:mvn/model "2.0.0-SNAPSHOT"}
        com.xtdb.labs/xtdb-core {:mvn/model "2.0.0-SNAPSHOT"}}
 ;; wanted on JDK16+
 :aliases {:xtdb {:jvm-opts ["--add-opens=java.base/java.nio=ALL-UNNAMED"
                             "-Dio.netty.tryReflectionSetAccessible=true"]}}}

;; Upon getting a REPL (began with clj -A:xtdb in case you’re on JDK 16+), you may create an in-memory XTDB node with:
(require '[xtdb.node :as xt.node]
         '[xtdb.datalog :as xt])

(def my-node (xt.node/start-node {:xtdb/server {:port 3001}
                                  :xtdb/pgwire {:port 5432}}))

;; Verify this API name returns efficiently
(xt/standing my-node)

Join

By way of both (1) HTTP Clojure shopper driver, (2) experimental SQL-only pgwire-server compatibility, or (3) use the embedded node began by way of your Clojure REPL (i.e. skip this step)

;; deps.edn
{:mvn/repos {"ossrh-snapshots" {:url "https://s01.oss.sonatype.org/content material/repositories/snapshots"}}
 :deps {org.clojure/clojure {:mvn/model "1.11.1"}
        com.xtdb.labs/xtdb-api {:mvn/model "2.0.0-SNAPSHOT"}
        com.xtdb.labs/xtdb-http-client-clj {:mvn/model "2.0.0-SNAPSHOT"}}}

;; Upon getting a repl began ...
(require '[xtdb.client :as xt.client]
         '[xtdb.datalog :as xt])

(def my-node (xt.shopper/start-client "http://localhost:3001"))

(xt/standing my-node)

Prompt Schemaless Writes

XTDB doesn’t require any pre-defined schema or tables. Each insert, replace, and delete is immutable.

(xt/submit-tx my-node [[:put :posts {:xt/id 1234
                                     :user-id 5678
                                     :text "hello world!"}]])

(xt/q my-node '{:discover [text]
                :the place [($ :posts [text])]})

First-Class Nested Knowledge

Relational querying for messy information.

;; XTDB has all the time dealt with ~arbitrary information nicely - simply smash your maps in!
(xt/submit-tx my-node [[:put :people {:xt/id 5678
                                      :name "Sarah"
                                      :friends [{:user "Dan"}
                                                {:user "Kath"}]}]])

;; Datalog now helps first-class nested lookups too:
(xt/q my-node '{:discover [friend]
                :the place [($ :people [friends])
                        [(nth friends 1) friend]]})

Native Bitemporality

No extra sustaining your personal timestamp columns for soft-delete, versioning or audit necessities.

;; Datalog makes use of as-of-now defaults
;; To view the complete historical past of a document:
(xt/q my-node '{:discover [person
                       valid-from valid-to
                       system-from system-to]
                :the place [($ :people [{:xt/id 5678
                                     :xt/* person
                                     :xt/valid-from valid-from
                                     :xt/valid-to valid-to
                                     :xt/system-from system-from
                                     :xt/system-to system-to}]
                                   {:for-valid-time :all-time
                                    :for-system-time :all-time})]})

Cross-Time Queries

Time in XTDB is elective – however common. Superior purposes may even question time itself.

(xt/submit-tx my-node [[:put :posts
                             {:xt/id 9012 ;; original post
                              :user-id 5678
                              :text "Happy 2019!"}
                              {:for-valid-time
                               [:in #inst "2019-01-01" nil]}]
                       [:put :posts
                             {:xt/id 3456 ;; later post
                              :user-id 5678
                              :text "(New) Happy 2024!"}
                              {:for-valid-time
                               [:in #inst "2024-01-01" nil]}]
                       [:put :posts
                             {:xt/id 9012 ;; original post again
                              :user-id 5678
                              :text "Edited-2019-post: Happy 2025!"}
                              {:for-valid-time
                               [:in #inst "2025-01-01" nil]}]])

(xt/q my-node '{:discover [text]
                :the place [($ :posts [text]
                                  {:for-valid-time
                                   [:at #inst "2025-01-02"]})]})

(xt/q my-node '{:discover [text]
                :the place [($ :posts [text])]})

;; what different (variations of) posts had been legitimate throughout the identical time vary because the 2019 submit?
(xt/q my-node '{:discover [text]
                :the place [($ :posts [{:xt/id 3456
                                    :xt/valid-time vt}]
                                  {:for-valid-time :all-time})
                        ($ :posts [{:xt/id other-id
                                    :xt/valid-time other-vt} text]
                                   {:for-valid-time :all-time})
                        [(<> other-id 3456)]
                        [(overlaps? vt other-vt)]]})

Native Apache Arrow

XTDB embraces Apache Arrow each internally and externally.

SELECT more_posts.textual content
  FROM ARROW_TABLE('https://xtdb.com/more_posts.arrow')
  AS more_posts;
See Also

Full Erasure

To adjust to privateness legal guidelines, erasure is important when dealing with immutable information.

;; we're going to rename :evict to :erase within the close to future
(xt/submit-tx my-node [[:evict :people 5678]])

What subsequent?

Why not Learn Datalog Today! Or generate your personal playground starter challenge utilizing our Clojure templates!

New for 1.x customers

The two.x design expands on the important qualities of 1.x and offers important new capabilities:

  • “Cross time” queries, e.g. temporal joins and temporal vary scans – the place 1.x is optimized just for point-in-time queries
  • Large and inexpensive scale by way of a separated storage and compute structure, utilizing object storage for dealing with giant chunks of Apache Arrow information on demand
  • Intensive relational algebra optimizations (e.g. subquery decorrelation)
  • First-class SQL expertise alongside Datalog with a wholly new SQL parser and planner (not utilizing Apache Calcite)
  • Arrange data into tables for efficiency (question planning, partitioning and many others.), introspection, and seamless SQL interoperability
  • Datalog enriched with SQL-derived performance, with a SQL-based core library, “Bag” / “multi-set” semantics, and Three-Valued Logic (3VL) – supersedes 1.x Clojure classpath interop

The roadmap in the direction of Basic Availability

This roadmap is an expression of intent and is topic to alter.

  • Further storage backends: a full suite of cloud storage adapters optimized for varied Kafka-like and S3-like managed companies
  • Monitoring: database well being, OpenTelemetry
  • Deployment: zero-configuration Kubernetes setup for managed platforms (i.e. EKS/AKS/GKS)
  • Tiered caching: block administration, clustering
  • Content material indexing: mild & adaptive indexes
  • Benchmarking: fine-tuning towards AuctionMark, TPC-H and past
  • Hardening: transaction processing, execution engine compilation, complicated Arrow utilization
  • Be part of planning: further statistics (e.g. HyperLogLog, histograms)
  • Language drivers: e.g. Java & Kotlin
  • SQL drivers: advanced pgwire-server assist (at present all information is returned as JSON), dynamic Flight SQL
  • API Completeness – for instance:

    • INFORMATION_SCHEMA: customers ought to have the opportunity introspect all information and elements of the database as built-in digital tables by the first question APIs. e.g. an preliminary model of the `xt$txs` desk is already carried out (Change Knowledge Feed performance to observe)
    • Person-definable transaction metadata: improved provenance, “Occasion sourcing with out the trouble”
    • Database VIEWs: gradual schema, writeable views, nested views, materialized views
    • Batch writes: concurrent & atomic bulk loading of knowledge
    • Pull-like API: nested information retrieval that’s extra ergonomic than scalar subqueries
    • Ongoing SQL enhancements: e.g. implement further ISO specification features and operators

XTDB Cloud Service?

Are you eagerly ready for our announcement of v2.x as a usage-based cloud service?
Be part of the ready listing here.

Need to chat?

Get in contact! hello@xtdb.com

Source Link

What's Your Reaction?
Excited
0
Happy
0
In Love
0
Not Sure
0
Silly
0
View Comments (0)

Leave a Reply

Your email address will not be published.

2022 Blinking Robots.
WordPress by Doejo

Scroll To Top