Distributed, MVCC SQLite that runs on FoundationDB.

Related tags

Database rust database
Overview

mvSQLite

Distributed, MVCC SQLite that runs on top of FoundationDB.

Documentation

Features

  • Full feature-set from SQLite: mvSQLite integrates with SQLite as a custom VFS layer. It is a layer "below" SQLite, and all of SQLite's features are available.
  • Time travel: Checkout the snapshot of your database at any point of time in the past.
  • Lock-free, scalable reads and writes: Optimistic fine-grained concurrency with BEGIN CONCURRENT-like semantics. mvSQLite inherits FoundationDB's lock-free property - not a single distributed lock is acquired during data plane operation.
  • Get the nice properties from FoundationDB, without its limits: Correctness, really fast and scalable distributed transactions, synchronous and asynchronous replication, integrated backup and restore. Meanwhile, there's no five-second transaction limit any more, and a SQLite transaction can be ~39x larger than FDB's native transaction.
  • Drop-in addition: Use LD_PRELOAD or a patched libsqlite3.so to plug mvSQLite into your existing apps. Read the docs

Releases

Grab the latest binaries from the Releases page. You can also build your own binaries to run on a platform other than x86-64.

Quick reference

Check the single-page mvSQLite Quick Reference for common operations with mvSQLite.

Try it

Install FoundationDB:

wget https://github.com/apple/foundationdb/releases/download/7.1.15/foundationdb-clients_7.1.15-1_amd64.deb
sudo dpkg -i foundationdb-clients_7.1.15-1_amd64.deb
wget https://github.com/apple/foundationdb/releases/download/7.1.15/foundationdb-server_7.1.15-1_amd64.deb
sudo dpkg -i foundationdb-server_7.1.15-1_amd64.deb

Download the binaries:

curl -L -o ./libmvsqlite_preload.so https://github.com/losfair/mvsqlite/releases/download/v0.2.1/libmvsqlite_preload.so
curl -L -o ./mvstore https://github.com/losfair/mvsqlite/releases/download/v0.2.1/mvstore
chmod +x ./mvstore

Run mvstore, the server-side half that should be colocated with the FoundationDB cluster in production:

RUST_LOG=info ./mvstore \
  --data-plane 127.0.0.1:7000 \
  --admin-api 127.0.0.1:7001 \
  --metadata-prefix mvstore \
  --raw-data-prefix m

Create a namespace with the admin API:

curl http://localhost:7001/api/create_namespace -i -d '{"key":"test"}'

Build libsqlite3 and the sqlite3 CLI: (note that a custom build is only needed here because the sqlite3 binary shipped on most systems are statically linked to libsqlite3 and LD_PRELOAD don't work)

wget https://www.sqlite.org/2023/sqlite-amalgamation-3410000.zip
unzip sqlite-amalgamation-3410000.zip
cd sqlite-amalgamation-3410000
gcc -O2 -fPIC --shared -o libsqlite3.so ./sqlite3.c -lpthread -ldl -lm
gcc -O2 -o sqlite3 ./shell.c -L. -lsqlite3

Set environment variables, and run the shell:

export RUST_LOG=info MVSQLITE_DATA_PLANE="http://localhost:7000"

# "test" is the key of the namespace we created earlier
LD_PRELOAD=../libmvsqlite_preload.so LD_LIBRARY_PATH=. ./sqlite3 test

You should see the sqlite shell now :) Try creating a table and play with it.

Contributing

mvsqlite can be built with the standard Rust toolchain:

cargo build --release -p mvstore
cargo build --release -p mvsqlite
make -C mvsqlite-preload

Internals are documented in the wiki.

Comments
  • Use from Python `sqlite` / creating a standalone `libsqlite3.so`

    Use from Python `sqlite` / creating a standalone `libsqlite3.so`

    This is a very exciting project! sqlite is a great interface, and FoundationDB is a great DB.

    I'd like to use mvsqlite from Python; it doesn't have to be via the stdlib's import sqlite (i.e. if a different 3rd-party library makes the integration easier), but FUSE is not an option in the context I am using (a unikernel). In fact, even if the LD_PRELOAD approach was usable by Python libraries, this unikernel context does not support that. For my use-case, I'd only be using mvsqlite and I'd be OK if the default sqlite library was overridden so that all sqlite connections use mvsqlite and the regular FS-based sqlite was not available.

    So, I'm thinking I'd need a different integration method, which would be along the lines of creating a standalone libsqlite3.so which can override the default system lib. I'm not quite sure how to build something like that, but I could also see it being helpful for other use-cases which are mvsqlite-only and want to avoid LD_PRELOAD.

    Does this make sense as a supported use-case? I'm not sure how to do it; I can poke around at modifying the mvsqlite-preload/Makefile for my own purposes, but it could be nice to have support for such an integration method in the repo.

    enhancement 
    opened by paulreimer 13
  • Executing mvstore for Windows

    Executing mvstore for Windows

    C:\Users\elee\Downloads\mvsqlite\target\release>set RUST_LOG=info
    
    C:\Users\elee\Downloads\mvsqlite\target\release>mvstore --data-plane 127.0.0.1:7000  --admin-api 127.0.0.1:7001 --metada
    ta-prefix mvstore --raw-data-prefix m
    Error: failed to initialize server
    
    Caused by:
        0: cannot open fdb cluster
        1: No cluster file found in current directory or default location
    
    opened by fire 4
  • feat: auto namespace creation

    feat: auto namespace creation

    Implemented a solution for for #109 in mvstore so the creation happens at the server side.

    I thought about doing it in the mvsqlite (client) side but I didnt know how to pass variables there and it looked messy when I thought about it.

    The flag for the feature in mvstore is --auto-create-namespace, if someone want some clients using this features and others dont, they can run two instances of mvstore with different prefixes.

    Tried my best to keep it minimal and mostly copy pasted stuff, not a rust expert so let me know if there is something wrong i made.

    Also a side question, is there a way to get the ns_id with the information in the create_namespace function so I dont have to call lookup_nskey after create_namespace? I tried so hard to know where can I get the ns_id from the variables inside create_namespace but sadly I coudint without doing a txn.get inside create_namespace after the commit

    opened by 5cat 2
  • In-memory content cache (mvstore)

    In-memory content cache (mvstore)

    Normally mvstore isn't designed to cache anything. Both FoundationDB and mvsqlite client cache data, so there doesn't need to be another layer.

    However some client apps, like Fossil, work in a way that isn't compatible with client-side caching. They fork() on each HTTP request, so the cache cannot be reused.

    Let's see whether we can improve performance for such apps by caching content pages in mvstore.

    opened by losfair 2
  • Instructions on how to build sqlite3.exe for windows

    Instructions on how to build sqlite3.exe for windows

    Windows support with sqlite3.exe

    cmd
    scoop install llvm openssl-mingw llvm-mingw
    cargo build --release -p mvsqlite` Works on Windows 11.
    cd mvsqlite/mvsqlite
    # Tinkering with shims see zip.
    gcc -O2 -o sqlite3 sqlite3.c shell.c shim.c preload.c -L../target/release -LC:/Users/elee/scoop/apps/openssl-mingw/current/lib64 -lmvsqlite -lssl -lcrypto -lWs2_32 -lbcrypt -lUserenv -lntdll
    set RUST_LOG=info
    set MVSQLITE_DATA_PLANE=http://localhost:7000
    sqlite3.exe test
    .vfslist
      2022-10-19T05:05:35.621924Z  INFO mvsqlite: mvsqlite initialized, default_sector_size: 8192
        at mvsqlite\src\lib.rs:174
    
    SQLite version 3.39.3 2022-09-05 11:02:23
    Enter ".help" for usage hints.
    sqlite> .vfslist
    vfs.zName      = "mvsqlite"  <--- CURRENT
    [...]
    

    mvsqlite.zip

    We are assuming that the fdb and mvstore is in an ubuntu os. That they've been started and the admin interface has been used to create a test database.

    Other notes

    The dependencies openssl-devel are required for ssl and crypto. Might be able to use mbedtls.

    opened by fire 2
  • Run stress tests without rowid

    Run stress tests without rowid

    Run stress tests without rowid. According to the documentation this has some benefits. Your blog posts state that rowid was harming concurrency.

    https://univalence.me/posts/mvsqlite-bench-20220930

    https://www.sqlite.org/withoutrowid.html

    opened by fire 1
  • Database name mapping

    Database name mapping

    This implements database aliases. Some applications don't like our special database path formats so let's make them happy.

    export MVSQLITE_DB_NAME_MAP="/some/path/expected/by/app.db=my-mvsqlite-database"
    
    opened by losfair 1
  • Online DDL - stage 1

    Online DDL - stage 1

    Related: https://github.com/losfair/mvsqlite/issues/70

    This PR implements a restricted form of online DDL. It permits concurrent read-only DML when a schema migration task is in progress.

    Currently you can already do non-blocking DDL with regular transactions, but that has a few limitations:

    • Schema migrations in a large database usually take a long time, and are likely to be indefinitely starved by concurrent small transactions in a busy system.
    • A transaction can write at most 50,000 pages of data. This forces the application developer to split a schema migration into multiple smaller transactions, and the application may see inconsistent data in between.

    This PR introduces single-writer lock, which when enabled permits only a single writer, the schema migration task, to write to the database. All other tasks see the latest consistent snapshot before the lock.

    opened by losfair 1
  • Support larger write transactions.

    Support larger write transactions.

    Currently the largest size of write transactions is 50,000 pages (~390 MiB). But sometimes we need larger transactions for tasks like schema change or data rewinding.

    This PR implements write transactions with unbounded size.

    opened by losfair 1
  • mvfs: Replace moka with lru due to memory leak

    mvfs: Replace moka with lru due to memory leak

    Seems that the moka crate has a memory leak issue when moka::sync::Cache is dropped. Detected in production, and confirmed with Valgrind:

    ==905778== 82,960 (560 direct, 82,400 indirect) bytes in 10 blocks are definitely lost in loss record 194 of 199
    ==905778==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==905778==    by 0x503005B: moka::sync_base::base_cache::BaseCache<K,V,S>::do_insert_with_hash::{{closure}} (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x502FD32: moka::cht::map::bucket::InsertOrModifyState<K,V,F>::into_insert_bucket (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x502CF77: moka::cht::map::bucket::BucketArray<K,V>::insert_or_modify (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4BC49EE: moka::cht::map::bucket_array_ref::BucketArrayRef<K,V,S>::insert_with_or_modify_entry_and (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x503A7F6: moka::sync::cache::Cache<K,V,S>::insert (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4BC8DDB: mvfs::vfs::Connection::insert_to_page_cache (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4B08D3A: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4B0A24A: _ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h50e20491b908d0c9E.llvm.3961465344180881740 (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmv
    sqlite_preload.so)
    ==905778==    by 0x4B1042B: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4A722A2: std::thread::local::LocalKey<T>::with (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4A97131: tokio::park::thread::CachedParkThread::block_on (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==
    ==905778== 165,920 (1,120 direct, 164,800 indirect) bytes in 20 blocks are definitely lost in loss record 197 of 199
    ==905778==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==905778==    by 0x503005B: moka::sync_base::base_cache::BaseCache<K,V,S>::do_insert_with_hash::{{closure}} (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x502FD32: moka::cht::map::bucket::InsertOrModifyState<K,V,F>::into_insert_bucket (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x502CF77: moka::cht::map::bucket::BucketArray<K,V>::insert_or_modify (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4BC49EE: moka::cht::map::bucket_array_ref::BucketArrayRef<K,V,S>::insert_with_or_modify_entry_and (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x503A7F6: moka::sync::cache::Cache<K,V,S>::insert (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4BC8DDB: mvfs::vfs::Connection::insert_to_page_cache (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4B08D3A: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4B0A24A: _ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h50e20491b908d0c9E.llvm.3961465344180881740 (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmv
    sqlite_preload.so)
    ==905778==    by 0x4B11852: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4A717CC: std::thread::local::LocalKey<T>::with (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==    by 0x4A96D7E: tokio::park::thread::CachedParkThread::block_on (in /home/ubuntu/Projects/mvsqlite/mvsqlite-preload/libmvsqlite_preload.so)
    ==905778==
    

    This PR replaces moka with lru to resolve the issue.

    opened by losfair 1
  • fix(deps): update rust crate bytes to 1.4.0

    fix(deps): update rust crate bytes to 1.4.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | bytes | dependencies | minor | 1.2.1 -> 1.4.0 |


    Release Notes

    tokio-rs/bytes

    v1.4.0

    Compare Source

    Added
    • Make IntoIter constructor public (#​581)
    Fixed
    • Avoid large reallocations when freezing BytesMut (#​592)
    Documented
    • Document which functions require std (#​591)
    • Fix duplicate "the the" typos (#​585)

    v1.3.0

    Compare Source

    Added
    • Rename and expose BytesMut::spare_capacity_mut (#​572)
    • Implement native-endian get and put functions for Buf and BufMut (#​576)
    Fixed
    • Don't have important data in unused capacity when calling reserve (#​563)
    Documented
    • Bytes::new etc should return Self not Bytes (#​568)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • fix(deps): update rust crate constant_time_eq to 0.3.0

    fix(deps): update rust crate constant_time_eq to 0.3.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | constant_time_eq | dependencies | minor | 0.2.4 -> 0.3.0 |


    Release Notes

    cesarb/constant_time_eq

    v0.3.0

    Compare Source

    • Use black_box instead of volatile read when inline assembly is not available.
    • Increase minimum Rust version to 1.66, which is when black_box was stabilized.

    v0.2.6

    Compare Source

    • New tests using the count_instructions crate; no functional changes.

    v0.2.5

    Compare Source

    • Add #[must_use] to all functions.

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Provide a single archive for executing mvsqlite

    Provide a single archive for executing mvsqlite

    Describe the project you are working on

    I am working on a virtual worlds game that balancing creating and adventuring.

    Describe the problem or limitation you are having in your project

    There is no single package that provides everything needed to execute mvsqlite.

    Describe the feature / enhancement and how it helps to overcome the problem or limitation

    1. Collect mvsqlite console shell
    2. Collect mvsqlite shared library
    3. Collect a tested version of foundation db
    4. Provide a single archive for setup

    Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

    Pick one platform and make sure the package contains everything needed to run mvsqlite.

    If this enhancement will not be used often, can it be worked around with a few lines of script?

    This is a long series of steps I have documented.

    Is there a reason why this should be core?

    I want to collaborate rather than work alone.

    opened by fire 0
  • fix(deps): update rust crate rmp-serde to 1.1.1 [security]

    fix(deps): update rust crate rmp-serde to 1.1.1 [security]

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | rmp-serde | dependencies | patch | 1.1.0 -> 1.1.1 |

    GitHub Vulnerability Alerts

    GHSA-255r-3prx-mf99

    It was found that Raw::from_utf8 expects valid UTF-8. If invalid UTF-8 is received it can cause the process to crash.


    Configuration

    📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • fix(deps): update rust crate backtrace to 0.3.68

    fix(deps): update rust crate backtrace to 0.3.68

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | backtrace | dependencies | patch | 0.3.66 -> 0.3.68 |


    Release Notes

    rust-lang/backtrace-rs (backtrace)

    v0.3.68

    Compare Source

    A bunch of behind-the-scenes work on upgrading CI has finally got things to a place where we can do confident releases again, so hopefully the next backtrace version will not take 6 months! Thanks to everyone who contributed to that! Most of the user-facing changes are about dependency updates and consequent improved platform compatibility, including with split DWARF. A few new functions on BacktraceFmt should also make it easier to inject additional text into backtrace's output.

    New Contributors

    Full Changelog: https://github.com/rust-lang/backtrace-rs/compare/0.3.67...0.3.68

    v0.3.67

    Compare Source

    What's Changed

    New Contributors

    Full Changelog: https://github.com/rust-lang/backtrace-rs/compare/0.3.66...0.3.67


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • fix(deps): update rust crate blake3 to 1.4.0

    fix(deps): update rust crate blake3 to 1.4.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | blake3 | dependencies | minor | 1.3.1 -> 1.4.0 |


    Release Notes

    BLAKE3-team/BLAKE3

    v1.4.0

    Compare Source

    version 1.4.0

    Changes since 1.3.3:

    • The C implementation provides a CMakeLists.txt for callers who build with CMake. The CMake build is not yet stable, and callers should expect breaking changes in patch version updates. The "by hand" build will always continue to be supported and documented.
    • b3sum supports the --seek flag, to set the starting position in the output stream.
    • b3sum --check prints a summary of errors to stderr.
    • Hash::as_bytes is const.
    • Hash supports from_bytes, which is const.

    v1.3.3

    Compare Source

    version 1.3.3

    Changes since 1.3.2:

    v1.3.2

    Compare Source

    version 1.3.2:

    Changes since 1.3.1:

    • Dependency updates only. This includes updating Clap to v4, which changes the format of the b3sum --help output. The new MSRV is 1.59.0 for blake3 and 1.60.0 for b3sum. Note that this project doesn't have any particular MSRV policy, and we don't consider MSRV bumps to be breaking changes.

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
Releases(v0.3.0)
Owner
Heyang Zhou
Working on distributed data infrastructure at Deno. I'm interested in digital systems in general, and their human sides as well.
Heyang Zhou
Mycelite is a SQLite extension that allows you to synchronize changes from one instance of SQLite to another.

Mycelite What is Mycelite? Mycelite is a SQLite extension that allows you to synchronize changes from one instance of SQLite to another. Currently, it

Mycelial 16 Jan 2, 2023
ChiselStore is an embeddable, distributed SQLite for Rust, powered by Little Raft.

ChiselStore ChiselStore is an embeddable, distributed SQLite for Rust, powered by Little Raft. SQLite is a fast and compact relational database manage

null 516 Jan 2, 2023
open source training courses about distributed database and distributed systemes

Welcome to learn Talent Plan Courses! Talent Plan is an open source training program initiated by PingCAP. It aims to create or combine some open sour

PingCAP 8.3k Dec 30, 2022
🧰 The Rust SQL Toolkit. An async, pure Rust SQL crate featuring compile-time checked queries without a DSL. Supports PostgreSQL, MySQL, SQLite, and MSSQL.

SQLx ?? The Rust SQL Toolkit Install | Usage | Docs Built with ❤️ by The LaunchBadge team SQLx is an async, pure Rust† SQL crate featuring compile-tim

launchbadge 7.6k Dec 31, 2022
Ergonomic bindings to SQLite for Rust

Rusqlite Rusqlite is an ergonomic wrapper for using SQLite from Rust. It attempts to expose an interface similar to rust-postgres. use rusqlite::{para

Rusqlite 1.9k Jan 5, 2023
SQLite clone from scratch in Rust

Rust-SQLite (SQLRite) Rust-SQLite, aka SQLRite , is a simple embedded database modeled off SQLite, but developed with Rust. The goal is get a better u

João Henrique Machado Silva 952 Jan 5, 2023
Simple and handy btrfs snapshoting tool. Supports unattended snapshots, tracking, restoring, automatic cleanup and more. Backed with SQLite.

Description Simple and handy btrfs snapshoting tool. Supports unattended snapshots, tracking, restoring, automatic cleanup and more. Backed with SQLit

Eduard Tolosa 27 Nov 22, 2022
Some bunch of test scripts to generate a SQLite DB with 1B rows in fastest possible way

To find out the fastest way to create an SQLite DB with 1B random rows.

null 309 Dec 20, 2022
🐸Slippi DB ingests Slippi replays and puts the data into a SQLite database for easier parsing.

The primary goal of this project is to make it easier to analyze large amounts of Slippi data. Its end goal is to create something similar to Ballchasing.com but for Melee.

Max Timkovich 20 Jan 2, 2023
A tool for automated migrations for PostgreSQL, SQLite and MySQL.

Models Models is an implementation for a SQL migration management tool. It supports PostgreSQL, MySQL, and SQLite. Quick Start install the CLI by runn

null 45 Nov 16, 2022
Provides a Rust-based SQLite extension for using Hypercore as the VFS for your databases.

SQLite and Hypercore A Rust library providing SQLite with an virtual file system to enable Hypercore as a means of storage. Contributing The primary r

Jacky Alciné 14 Dec 5, 2022
cogo rust coroutine database driver (Mysql,Postgres,Sqlite)

cdbc Coroutine Database driver Connectivity.based on cogo High concurrency,based on coroutine No Future<'q,Output=*>,No async fn, No .await , no Poll*

co-rs 10 Nov 13, 2022
Interface to SQLite

SQLite The package provides an interface to SQLite. Example Open a connection, create a table, and insert some rows: let connection = sqlite::open(":m

Stainless Steel 139 Dec 28, 2022
Rusqlite is an ergonomic wrapper for using SQLite from Rust

Rusqlite Rusqlite is an ergonomic wrapper for using SQLite from Rust. It attempts to expose an interface similar to rust-postgres. use rusqlite::{para

Rusqlite 1.9k Jan 7, 2023
SQLite compiled to WASM with pluggable data storage

wasm-sqlite SQLite compiled to WASM with pluggable data storage. Useful to save SQLite in e.g. Cloudflare Durable Objects (example: https://github.com

Markus Ast 36 Dec 7, 2022
Build SQLite virtual file systems (VFS) by implementing a simple Rust trait.

sqlite-vfs Build SQLite virtual file systems (VFS) by implementing a simple Rust trait. Documentation | Example This library is build for my own use-c

Markus Ast 56 Dec 19, 2022
Persist EWW histories into SQLite

EWW History Extension Persist EWW histories into SQLite. Besides EWW, packages below are also supported: elfeed Welcome to open an issue if you have a

null 5 Sep 23, 2022
webmention-receiver - a simple program that receives webmentions, records them to a SQLite database

webmention-receiver is a simple program that receives webmentions, records them to a SQLite database, and allows viewing them via a webpage or RSS feed. It has no conception of an "account", and by default will accept webmentions for any domain. It is possible to configure it to only accept webmentions for a specific set of domains, if you'd prefer.

Wesley Aptekar-Cassels 11 Sep 3, 2022
Grsql is a great tool to allow you set up your remote sqlite database as service and CRUD(create/read/update/delete) it using gRPC.

Grsql is a great tool to allow you set up your remote sqlite database as service and CRUD (create/ read/ update/ delete) it using gRPC. Why Create Thi

Bruce Yuan 33 Dec 16, 2022