litefs VS bb-remote-execution

Compare litefs vs bb-remote-execution and see what are their differences.

litefs

FUSE-based file system for replicating SQLite databases across a cluster of machines (by superfly)

bb-remote-execution

Tools for Buildbarn to allow remote execution of build actions (by buildbarn)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
litefs bb-remote-execution
38 3
3,620 103
3.4% 2.9%
8.0 8.2
3 months ago 24 days ago
Go Go
Apache License 2.0 Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

litefs

Posts with mentions or reviews of litefs. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-11-22.
  • Handle Incoming Webhooks with LiteJob for Ruby on Rails
    2 projects | dev.to | 22 Nov 2023
    Firstly, LiteJob's reliance on SQLite inherently restricts its horizontal scaling capabilities. Unlike other databases, SQLite is designed for single-machine use, making it challenging to distribute workload across multiple servers. This can certainly be done using novel technologies like LiteFS, but it is far from intuitive.
  • Experimenting on the Edge with Turso (and Go)
    2 projects | /r/golang | 28 Oct 2023
    Im curious to know if others have tried out Turso or LiteFS or any of the newer edge db providers that are popping up in 'real world' applications and what your experiences have been?
  • Skip the API, Ship Your Database
    5 projects | news.ycombinator.com | 13 Sep 2023
    Author here. I think we could have set better expectations with our Postgres docs. It wasn't meant to be a managed service but rather some tooling to help streamline setting up a database and replicas. I'm sorry about the troubles you've had and that it's come off as us being disingenuous. We blog about things that we're working on and find interesting. It's not meant say that we've figured everything out but rather this is what we've tried.

    As for this post, it's not managed SQLite but rather an open source project called LiteFS [1]. You can run it anywhere that runs Linux. We use it in few places in our infrastructure and found that sharing the underlying database for internal tooling was really helpful for that use case.

    [1]: https://github.com/superfly/litefs

  • SQLedge: Replicate Postgres to SQLite on the Edge
    9 projects | news.ycombinator.com | 9 Aug 2023
    #. SQLite WAL mode

    From https://www.sqlite.org/isolation.html https://news.ycombinator.com/item?id=32247085 :

    > [sqlite] WAL mode permits simultaneous readers and writers. It can do this because changes do not overwrite the original database file, but rather go into the separate write-ahead log file. That means that readers can continue to read the old, original, unaltered content from the original database file at the same time that the writer is appending to the write-ahead log

    #. superfly/litefs: aFUSE-based file system for replicating SQLite https://github.com/superfly/litefs

    #. sqldiff: https://www.sqlite.org/sqldiff.html https://news.ycombinator.com/item?id=31265005

    #. dolthub/dolt: https://github.com/dolthub/dolt

    > Dolt can be set up as a replica of your existing MySQL or MariaDB database using standard MySQL binlog replication. Every write becomes a Dolt commit. This is a great way to get the version control benefits of Dolt and keep an existing MySQL or MariaDB database.

    #. pganalyze/libpg_query: https://github.com/pganalyze/libpg_query :

    > C library for accessing the PostgreSQL parser outside of the server environment

    #. Ibis + Substrait [ + DuckDB ]

    > ibis strives to provide a consistent interface for interacting with a multitude of different analytical execution engines, most of which (but not all) speak some dialect of SQL.

    > Today, Ibis accomplishes this with a lot of help from `sqlalchemy` and `sqlglot` to handle differences in dialect, or we interact directly with available Python bindings (for instance with the pandas, datafusion, and polars backends).

    > [...] `Substrait` is a new cross-language serialization format for communicating (among other things) query plans. It's still in its early days, but there is already nascent support for Substrait in Apache Arrow, DuckDB, and Velox.

    #. benbjohnson/postlite: https://github.com/benbjohnson/postlite

    > postlite is a network proxy to allow access to remote SQLite databases over the Postgres wire protocol. This allows GUI tools to be used on remote SQLite databases which can make administration easier.

    > The proxy works by translating Postgres frontend wire messages into SQLite transactions and converting results back into Postgres response wire messages. Many Postgres clients also inspect the pg_catalog to determine system information so Postlite mirrors this catalog by using an attached in-memory database with virtual tables. The proxy also performs minor rewriting on these system queries to convert them to usable SQLite syntax.

    > Note: This software is in alpha. Please report bugs. Postlite doesn't alter your database unless you issue INSERT, UPDATE, DELETE commands so it's probably safe. If anything, the Postlite process may die but it shouldn't affect your database.

    #. > "Hosting SQLite Databases on GitHub Pages" (2021) re: sql.js-httpvfs, DuckDB https://news.ycombinator.com/item?id=28021766

    #. awesome-db-tools https://github.com/mgramin/awesome-db-tools

  • Fly.io Postgres cluster went down for 3 days, no word from them about it
    9 projects | news.ycombinator.com | 20 Jul 2023
  • LiteFS Cloud: Distributed SQLite with Managed Backups
    9 projects | news.ycombinator.com | 5 Jul 2023
    LiteFS works sorta like that. It provides read replicas on all your application servers so you can use it just like vanilla SQLite for queries.

    Write transactions have to occur on the primary node but that's mostly because of latency. SQLite operates in serializable isolation so it only allows one transaction at a time. If you wanted to have all nodes write then you'd need to acquire a lock on one node and then update it and then release the lock. We actually allow this on LiteFS using something called "write forwarding" but it's pretty slow so I wouldn't suggest it for regular use.

    We're adding an optional a query API over HTTP [1] soon as well. It's inspired by Turso's approach. That'll let you issue one or more queries in a batch over HTTP and they'll be run in a single transaction.

    [1]: https://github.com/superfly/litefs/issues/326

  • We Raised a Bunch of Money
    1 project | news.ycombinator.com | 28 Jun 2023
    Basically, LiteFS: https://github.com/superfly/litefs

    And then some load balancer cleverness that reroutes writes to a specific VM: https://fly.io/blog/globally-distributed-postgres/

  • Mycelite: SQLite extension to synchronize changes across SQLite instances
    8 projects | news.ycombinator.com | 25 Jun 2023
  • Database suggestion to store and retrieve data
    2 projects | /r/webdev | 16 Jun 2023
  • Key-value store has been added to Deno API
    2 projects | /r/Deno | 23 Mar 2023
    But my guess is they'll have an alternate implementation or something like LiteFS in Deno Deploy that will make this substantially more interesting when running in the Cloud.

bb-remote-execution

Posts with mentions or reviews of bb-remote-execution. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-09-12.
  • Write Your Own Task Queue
    5 projects | news.ycombinator.com | 12 Sep 2022
    Though it obviously depends on the case at hand, I sort of agree with this.

    For a distributed build cluster that I maintain (Buildbarn, https://github.com/buildbarn/bb-remote-execution/), I also had to implement a scheduler process that would queue compilation/test actions, so that they can be executed on workers later on.

    Initially I looked into using some conventional queueing system, but eventually settled on implementing my own as part of the scheduler process. So far I'm really happy with this choice, as it has allowed me to implement the following features, and more:

    - In-flight deduplication of identical compilation actions. If identical actions are scheduled with different priorities, the highest priority is used.

    - Multi-level scheduling fairness between groups, users in a group, builds run by the same user, etc.. The fairness cooperates well with priorities.

    - Automatic removal of queued actions that are no longer associated with any running build.

    - Stickiness, where workers prefer picking up actions that are similar to the one they ran previously, for reducing network utilisation.

    - Facilities for draining workers.

    Though I'm not saying it would have been impossible to achieve this with an off the shelf task queue, I'm not convinced it would have been easy. Adding new features right now only means I need to care about the actual semantics of it, as opposed to trying to figure out how to map it onto the feature set of the queueing system of choice.

  • LiteFS a FUSE-based file system for replicating SQLite
    5 projects | news.ycombinator.com | 26 Jul 2022
    I was going to raise that point exactly.

    As someone who spends an awful amount of time using FUSE, my recommendation is to only use it in cases where the software that interacts with the file system isn't easily changeable. For example, for Buildbarn which I maintain (https://github.com/buildbarn/bb-remote-execution), I need to use it. It's infeasible to change arbitrary compilers and tests to all interact with a network distributed build cache. Designing the FUSE file system was a pretty heavy investment though, as you really need to be POSIXly correct to make it all work. The quality of implementations of FUSE also varies between OSes and their versions. macFUSE, for example, is quite different from Linux FUSE.

    Given that SQLite already has all of the hooks in place, I would strongly recommend using those. In addition to increasing portability, it also makes it easier to set up/run. As an example, it's pretty hard to mount a FUSE file system inside of a container running on Kubernetes without risking locking up the underlying host. Doing the same thing with the SQLite VFS hooks is likely easy and also doesn't require your container to run with superuser privileges.

  • Disorderfs: FUSE-based filesystem that introduces non-determinism into metadata
    1 project | news.ycombinator.com | 29 Jan 2021
    Buildbarn, a build cluster implementation for Bazel that I maintain, can also run build actions (compilation steps, unit tests) in a FUSE file system. Though the primary motivator for this is that it reduces the time to construct a build action's file system to nearly instant, it has the advantage that I can also do things similar to disorderfs. Shuffling directory listings is actually something that I also added. Pretty useful!

    https://github.com/buildbarn/bb-remote-execution/blob/eb1150...

What are some alternatives?

When comparing litefs and bb-remote-execution you can also consider the following projects:

litestream - Streaming replication for SQLite.

verneuil - Verneuil is a VFS extension for SQLite that asynchronously replicates databases to S3-compatible blob stores.

sqlite-s3vfs - Python writable virtual filesystem for SQLite on S3

BeanstalkD - Beanstalk is a simple, fast work queue.

dqlite - Embeddable, replicated and fault-tolerant SQL engine.

asciiflow - ASCIIFlow

mvsqlite - Distributed, MVCC SQLite that runs on FoundationDB.

miniqueue - A simple, single binary, message queue. Supports HTTP/2 and Redis Protocol.

Bedrock - Rock solid distributed database specializing in active/active automatic failover and WAN replication

workerpool-go - auto-scaling worker pool (work queue) in Go, using generics

marmot - A distributed SQLite replicator built on top of NATS

prisma-engines - 🚂 Engine components of Prisma ORM