• anon291 3 days ago |
    This seems to be a key value store built atop object storage. Which is to say, it seems completely redundant. Not sure if there's some feature I'm missing, but all of the six features mentioned on the front page are things you'd have if you used the key value store directly (actually, you get more because then you get multiple writers).

    I was excited at first and thought this was SQL atop S3 et al. I've jerryrigged a solution to this using SQLite with a customized VFS backend, and would suggest that as an alternative to this particular project. You get the benefit of ACID transactions across multiple tables and a distributed backend.

    • abound 3 days ago |
      If you want SQLite backed by S3, maybe something like SQLite in :memory: mode with Litestream would work?

      Edit: actually not sure if you can use :memory: mode since Litestream uses the WAL (IIRC), so maybe a ramfs instead

      • anon291 3 days ago |
        There are many solutions. The particular example I was using SQLite via webassembly and then resorting to HTTP's fetch api for a read-only solution.
      • candiddevmike 3 days ago |
        In my experience, SQLite on S3 is ridiculously slow. The round trip for writes is horrendous, so you end up doing batch saves, but you need a WAL, which has the same problem as the main DB file.
    • iudqnolq 3 days ago |
      Using an s3 object per key would be too expensive for many use cases.

      The website is a bit fancy but the readme seems to pretty straightforwardly explain why you might want this. It seems to me like a nice little (13k loc) project that doesn't fit my needs but might come in handy for someone else?

    • necubi 3 days ago |
      This is a low-level embedded db that would be used by sql databases/query engines/streaming engines/etc rather than something that's likely to make sense for you to use as an application developer. It sits in a similar space to RocksDB and LevelDB.

      You generally can't use object storage directly for this stuff; if you have a high volume of writes, it's incredibly slow (and expensive) to write them individually to s3. Similarly, on the read side you want to be able to cache data on local disk & memory to reduce query latency and cost.

    • vineyardmike 3 days ago |
      > I was excited at first and thought this was SQL atop S3 et al.

      You can check out Neon.tech who makes an OS Postgres-on-s3 and DuckDB who makes an embedded DB with transaction support that can operate over S3

    • aseipp 3 days ago |
      People want object storage as the backend because in practice it means that you can decouple compute and storage entirely, it has no requirement to provision space up front, and robust object storage systems with (de facto) standardized APIs like S3's are widely available for all kinds of deployments and from many providers, in many forms. In other words: it works with what people already have and want.

      Essentially every standalone or embedded key-value storage solution treats the KV store and its operation like a database, from what I can tell -- which is sensible because that's what they are! But people use object stores exactly because they don't operate like traditional databases.

      Now there are problems with object stores (they are very coarse grained and have high per-object overhead, necessitating some design that can reconcile the round hole and the square peg) -- but this is just the reality of what people are working with. If there is some other key-value store server/implementation you know of, one that performs and offers APIs like an actual database (e.g. multi writer, range scans, atomic writes) but with unlimited storage, no provisioning, and it's got over 10+ different widespread implementations across every major compute and cloud provider -- I'm interested in what that project is.

  • epolanski 3 days ago |
    Not a db guy, just asking, what does it mean "embedded" database?

    I'm confused here, because Google says it's a db bundled with the application, but that's not really what I get from the landing page.

    What problem does it solve?

    • leetrout 3 days ago |
      Embedded means it runs in your application process not a standalone server / service.
  • yawnxyz 3 days ago |
    is this an easier to do the "store parquet on s3 > stream to duckdb" pattern that's popping up more and more?
    • vineyardmike 3 days ago |
      > MemTables are flushed periodically to object storage as a string-sorted table (SST). The flush interval is configurable.

      Looks like it has a pretty similar structure under the hood, but DuckDB would get you more powerful queries.

      FYI duckdb directly supports writes (and transactions) so you don’t necessarily even need the separate store step.

    • jitl 3 days ago |
      This is more targeted at OLTP style workloads with mutable data and potentially multiple writers
    • kosmozaut 3 days ago |
      Do you know any resources/examples about the setup you mean? It sound interesting but from a quick search I didn't find anything straight forward.
      • atombender 2 days ago |
        Check out Apache Iceberg. It's a format for storing Parquet data in object storage, for both read and write. Not sure if DuckDB does Iceberg (I know ClickHouse does), but it's a similar principle, disaggregating data from compute.
  • loxias 3 days ago |
    Can I please, please, please, have C++ or at least C bindings? :) Or the desired way to call Rust from another runtime? I don't know any Rust.
    • jitl 3 days ago |
      Rust is just another programming language that’s quite similar to C++. The main difference is there’s like 4 types for String (some are references and some are owned) and methods for a struct go in a `impl StructName` block after the struct definition instead of inside it.

      I don’t really know rust either but I’m currently writing some bindings to expose Rust libraries to NodeJS and not having too much trouble.

      For rust -> c++ I googled one time and found this tool which Mozilla seems to use to call Rust from C++ in their web browser, maybe it would “just work”: https://github.com/mozilla/cbindgen?tab=readme-ov-file

      • sebastianconcpt 3 days ago |
        Although the borrowing rules will make you feel is quite a different language than others.
      • ptdorf 2 days ago |
        > there’s like 4 types for String

        Try 12.

  • jitl 3 days ago |
    From the docs https://slatedb.io/docs/introduction/

    > NOTE

    > Snapshot isolation and transactions are planned but not yet implemented.

    • quadrature 3 days ago |
      Might have been older docs. They now say that transactions are supported

      “ Snapshot isolation: SlateDB supports snapshot isolation, which allows readers and writers to see a consistent view of the database. Transactions: Transactional writes are supported.“

  • nmca 3 days ago |
    > Object storage is an amazing technology. It provides highly-durable, highly-scalable, highly-available storage at a great cost.

    I don’t know if this was intended to be intentional funny, but there is a little ambiguity in the expression “great cost”, typically great cost means very expensive.

    Very cool and useful shim otherwise :)

    • unshavedyak 3 days ago |
      Is there an alternate meaning that you first took it as? Monetary cost was my take as well hah.
      • raybb 3 days ago |
        The other meaning it could have is that it's a good price/deal.
      • paulgb 3 days ago |
        Monetary cost in both cases, but it's the two meanings of “great”, which can either mean “large” or “good”.
    • OJFord 3 days ago |
      That's funny actually - 'great cost', great takes meaning of large; 'great price', great takes meaning of very good (i.e. small in this context).

      Always that way around, ESL's a minefield!

    • notthistime12 2 days ago |
      Native English speaker here. "At a great cost" means "at a good price". "At great cost" would mean "expensive".
      • skrtskrt 2 days ago |
        you 100% correct not sure why this is downvoted away
      • OJFord 2 days ago |
        Can you be more specific than native English? I've never heard or read 'great cost' be anything other than large cost, it's the use of 'cost'. If you say 'a great price', sure, but 'cost' is already implying something negative I suppose.

        (Native BrE, SW UK.)

      • manojlds 2 days ago |
        Rarely trust native English speakers.

        At a great cost is exactly at a very high cost, not "at a good price".

        Any actual sources for your claim except for being a "native" speaker.

  • hantusk 3 days ago |
    Since writes to object storage are going to be slow anyway, why not double down on read optimized B-trees rather than write optimized LSM's?
    • chipdart 3 days ago |
      I think slow writes are not a major concern, as most databases already use some fast log-type data structure to persist writes, and then merge/save these logs to a higher-capacity and slower medium on specific events.
  • goodpoint 3 days ago |
    Despite the name this is not a database.
    • mtndew4brkfst 3 days ago |
      What definition/criteria do you feel it does not satisfy?
      • goodpoint 3 days ago |
        Pretty much the usual definition. https://en.wikipedia.org/wiki/Database
        • jitl 2 days ago |
          > Formally, a "database" refers to a set of related data accessed through the use of a "database management system" (DBMS), which is an integrated set of computer software that allows users to interact with one or more databases and provides access to all of the data contained in the database (although restrictions may exist that limit access to particular data). The DBMS provides various functions that allow entry, storage and retrieval of large quantities of information and provides ways to manage how that information is organized.

          What makes SlateDB not qualify for this definition? It seems to qualify for me.

          • goodpoint 18 hours ago |
            It's in the next paragraph:

            > Small databases can be stored on a file system, while large databases are hosted on computer clusters or cloud storage. The design of databases spans formal techniques and practical considerations, including data modeling, efficient data representation and storage, query languages, security and privacy of sensitive data, and distributed computing issues, including supporting concurrent access and fault tolerance.

            SlateDB delegates all of this to the object storage behind it. (I don't mean it in a disparaging way at all, just a fact)

            • jitl 15 hours ago |
              That’s like saying Postgres delegates all this to the file system behind it. Neither a file system or S3 provide writer fencing, indexed range queries, batched/paged IO, or fine-grained data model.
        • mtndew4brkfst 2 days ago |
          Do you feel that e.g. Redis fails to satisfy the same definition in basically the same ways? If it does fulfill the criteria, what do you see as the distinction?
          • notthistime12 2 days ago |
            Redis is a key-value store.
            • jitl 2 days ago |
              A key-value store is a type of database.
          • rehevkor5 2 days ago |
            Calling Redis a database is a generous generalization. For example, Redis does not necessarily provide the same kind of durability as a database does, nor the capabilities one would expect from an RDBMS. In many cases, depending on configuration, it might be more appropriate to instead refer to Redis as a cache, an in-memory database, or a NoSQL database.
  • tgdn 3 days ago |
    "It doesn't currently ship with any language bindings"

    Rust is needed to use SlateDB at the moment

  • demarq 3 days ago |
    Embed cloud

    Sounds like they just cancel each other out. Not sure what advantage embedding will yield here

  • remon 3 days ago |
    I've read the introduction and descriptions two times now and I still don't understand what this adds to the proceedings. It appears to be an extremely thin abstraction over object storage solutions rather than an actual DB which the name and their texts imply.
  • shenli3514 3 days ago |
    Went thru the document: https://slatedb.io/docs/introduction/#use-cases I can not understand why are they targeting the following use cases with this architecture. * Stream processing * Serverless functions * Durable execution * Workflow orchestration * Durable caches * Data lakes
  • drodgers 3 days ago |
    It looks like writes are buffered in an in-memory write ahead log before being written to object storage, which means that if the writer box dies, then you lose acknowledged writes.

    I've built something similar for low-cost storage of infrequently accessed data, but it uses our DBMS (MySQL) for the WAL (+ cache of hot reads), so you get proper durability guarantees.

    The other cool trick to use is to use Bε-trees (a relatively recent innovation from Microsoft Research) for the object storage compaction to minimise the number of write operations needed when flushing the WAL.

    • quadrature 3 days ago |
      You have the ability to choose your durability guarantee. You can choose to have synchronous writes, in which case the client blocks until the write is acknowledged.

      https://docs.rs/slatedb/latest/slatedb/config/struct.WriteOp...

    • 0x1ceb00da 3 days ago |
      Is there something similar that caches recent changes locally if the device is offline and uploads them when it comes online?
  • rehevkor5 2 days ago |
    I don't see how it's embedded if it relies on nonlocal services... on the contrary it says specifically, "no local state". It appears to be more analogous to a "lakehouse architecture" implementation (similar to, for example, Apache Iceberg), where your app includes a library that knows how to interact with the data in cloud object storage.
    • indrora 2 days ago |
      The general definition of "Embedded" is that the engine runs in your application space, as opposed to the more traditional DBMS (MariaDB, Valkey, etc) being a Full Fat Process just for itself. [1] This can reduce RTT to the database itself because you're already there: You've got a whole DB at your fingertips. There's very little worry of cross-application data stink because each application has its own database, alleviating a lot of the authN/Z that comes with a network attached DBMS.

      1: https://en.wikipedia.org/wiki/Embedded_database