embedded-postgres VS multiversion-concurrency-contro

Compare embedded-postgres vs multiversion-concurrency-contro and see what are their differences.

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
embedded-postgres multiversion-concurrency-contro
5 16
326 -
2.5% -
6.4 -
about 1 month ago -
Java
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.

embedded-postgres

Posts with mentions or reviews of embedded-postgres. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-02-27.
  • Testcontainers
    16 projects | news.ycombinator.com | 27 Feb 2024
  • Why you should probably be using SQLite
    8 projects | news.ycombinator.com | 27 Oct 2023
    Little use if you’re not on the JVM but I’ve had great success with Embedded Postgres:

    https://github.com/zonkyio/embedded-postgres

    Each test just copies a template database so it’s ultra fast and avoids the need for complicated reset logic.

  • Ask HN: What's your favorite software testing framework and why?
    15 projects | news.ycombinator.com | 21 May 2023
    Outside of differences between assertion-based unit tests and property-based tests (both of which are worth doing), I don't think framework makes much difference. But your approach to testing definitely does.

    I think every language having its own testing framework is good, even for things like functional tests which can often be externalised. Tests are an essential part of every project and should be well integrated with the rest of the codebase and the team creating it. Often, the tests are the only good place to go and see what an app actually _does_ and so they form an essential part of the documentation.

    In my experience it's very rare that you can effectively create and maintain something like Cucumber tests owned by anyone but the team implementing the code so there's little benefit to translating from a text DSL like that. But the language used is definitely useful, so what I like to see is code in the implementation language that matches the Given/When/Then structure of those tests, but instead of reusable text steps you just have reusable functions which take parameters. This means you can easily refactor, and use the full functionality of your IDE to suggest and go to definitions etc. No matter what, you should treat your test code the same way you do everything else - abstractions matter, so functional tests at the top level should rarely just be about clicking on things and asserting other things, they should be in the language of the domain.

    Functional tests are worth much more than unit tests. No only do they test the only things of actual business value, they are also more robust in the face of implementation refactorings and so require less rework (unless you're being overly specific with CSS selectors etc). Unit tests are often highly coupled to specific implementations and can be a poor investment, especially early in a project. I believe a good balance is functional and integration tests that explore the various paths through your app and prove everything's hooked up, coupled with property based unit tests for gnarly or repetitive logic that isn't worth endlessly iterating via the UI. All other unit tests are optional and at the discretion of the implementer.

    You should be able to mock out every major articulation point in your code, but it's generally preferable if you can mock _real_ dependencies. That is, instead of mocking out a 'repository' abstraction that looks stuff up and returns canned data, have a real test database against which you look up real data (created by steps in your functional tests). This reduces risk and cognitive overhead (you're not having to encode too many assumptions in your test suite) and doesn't have to be as slow as people like to make out - Embedded Postgres is quite fast, for example:

    https://github.com/zonkyio/embedded-postgres

    Same with network services - it's not slow to chat to localhost and you'll find more issues testing proper round-trips. I have not found "assert that you called X" style testing with mocks useful - you care about outcomes, not implementation details.

    Beyond all that, as long as you can make assertions that generate clear error messages, you're fine.

  • Hctree is an experimental high-concurrency database back end for SQLite
    5 projects | news.ycombinator.com | 18 Jan 2023
    I use an embedded postgres testing library for the JVM that does something along those lines.

    Well no actually it just unpacks the tar file in a temp dir and runs the full postgres, but it mostly feels like what you describe (minus the single file part) and starts surprisingly fast. That would totally work for a little proof of concept (https://github.com/zonkyio/embedded-postgres)

  • Thoughts on Micronaut vs. Quarkus?
    2 projects | /r/java | 21 Aug 2022

multiversion-concurrency-contro

Posts with mentions or reviews of multiversion-concurrency-contro. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-05-18.
  • CRDT-richtext: Rust implementation of Peritext and Fugue
    17 projects | news.ycombinator.com | 18 May 2023
    https://github.com/samsquire/multiversion-concurrency-contro...

    And I implemented a 3 way text diff with myers algorithm based on https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm...

    https://github.com/samsquire/text-diff

    I implemented an eventually consistent mesh protocol that uses timestamps to provide last write wins

  • A collection of lock-free data structures written in standard C++11
    7 projects | news.ycombinator.com | 10 May 2023
    I think I lean towards per-thread sharding instead of mutex based or lock free data structures except for lockfree ringbuffers.

    You can get embarassingly parallel performance if you split your data by thread and aggregate periodically.

    If you need a consistent view of your entire set of data, that is slow path with sharding.

    In my experiments with multithreaded software I simulate a bank where many bankaccounts are randomly withdrawn from and deposited to. https://github.com/samsquire/multiversion-concurrency-contro...

    I get 700 million requests per second due to the sharding of money over accounts.

  • The “Build Your Own Database” book is finished
    5 projects | news.ycombinator.com | 22 Apr 2023
    If you want some sample code to implement MVCC, I implemented MVCC in multithreaded Java as a toy example

    https://github.com/samsquire/multiversion-concurrency-contro...

    First read TransactionC.java then read MVCC.java

  • Let's write a setjmp
    4 projects | news.ycombinator.com | 12 Feb 2023
    I wrote an unrolled switch statement in Java to simulate eager async/await across treads.

    https://github.com/samsquire/multiversion-concurrency-contro...

    The goal is that a compiler should generate this for you. This code is equivalent to the following:

       task1:
  • Structured Concurrency Definition
    2 projects | news.ycombinator.com | 6 Feb 2023
    https://doc.rust-lang.org/book/ch16-00-concurrency.html

    I've been working on implementing Java async/await state machine with switch statements and a scheduling loop. If the user doesn't await the async task handle, then the task's returnvalue is never handled. This is similar to the Go problem with the go statement.

    https://github.com/samsquire/multiversion-concurrency-contro...

    If your async call returns a handle and

  • Small VMs and Coroutines
    3 projects | news.ycombinator.com | 19 Jan 2023
    yield value2++

    https://github.com/samsquire/multiversion-concurrency-contro...

    I am still working on allowing multiple coroutines to be in flight in parallel at the same time. At the moment the tasks share the same background thread.

    I asked this stackoverflow question regarding C++ coroutines, as I wanted to use coroutines with a thread pool.

    https://stackoverflow.com/questions/74520133/how-can-i-pass-...

  • Hctree is an experimental high-concurrency database back end for SQLite
    5 projects | news.ycombinator.com | 18 Jan 2023
    This is very interesting. Thank you for submitting this and thank you for working on this.

    I am highly interested in parallelism and high concurrency. I implemented multiversion concurrency control in Java.

    https://github.com/samsquire/multiversion-concurrency-contro...

    I am curious how to handle replication with high concurrency. I'm not sure how you detect dangerous reads+writes to the same key (tuples/fields) across different replica machines. In other words, multiple master.

    I am aware Google uses truetime and some form of timestamp ordering and detection of interfering timestamps. But I'm not sure how to replicate that.

    I began working on an algorithm to synchronize database records, do a sort, then a hash for each row where hash(row) = hash(previous_row.hash + row.data)

    Then do a binary search on hashes matching/not matching. This is a synchronization algorithm I'm designing that requires minimal data transfer but multiple round trips.

    The binary search would check the end of the data set for hash(replica_a.row[last]) == hash(replica_b.row[last]) then split the hash list in half and check the middle item, this shall tell you which row and which columns are different.

  • Tail Call Optimization: The Musical
    2 projects | news.ycombinator.com | 8 Jan 2023
    https://github.com/samsquire/multiversion-concurrency-contro...

    I want to redesign the architecture of the async/await to be easier to understand. I want to use a state machine somehow.

  • Rust Atomics and Locks: Low-Level Concurrency in Practice
    3 projects | news.ycombinator.com | 6 Jan 2023
    I wrote an unrolled state machine for my async/await in Java. This models a simple async/await program and runs tasks on other threads - without locks. I use a design I call token ring parallelism, where threads take turns and are linked together in a ring structure.

    https://github.com/samsquire/multiversion-concurrency-contro...

    I wrote a own lock free algorithm here that I use to do message passing between actor threads. My goal is high throughput performance and low latency.

    https://github.com/samsquire/multiversion-concurrency-contro...

    With 11 threads (on a 12 core processor, deliberately left one core for Windows)

  • A Compiler Writing Playground
    3 projects | news.ycombinator.com | 26 Nov 2022
    I then started writing a parser for a high level language and then code generation from the AST to the imaginary assembly. My interpreter is multithreaded and can send integers between interpreters. It is very early and doesn't do much.

    Code is at https://github.com/samsquire/multiversion-concurrency-contro...

    The high level language looks similar to Javascript except I tried to parse everything as an expression. I need to parse functions as expressions.

    I was experimenting with Protothreads in C recently to try understand how it worked and I wrote a giant switch statement and a while loop in Java to simulate async/await. It would be interesting to do codegen for coroutines.

    here's that giant switch statement and scheduler https://github.com/samsquire/multiversion-concurrency-contro...

    One idea for a stackless design I had was to preallocate memory for each method call for a call to that function and avoid a stack altogether. This would allow coroutines between methods and avoid the function colour problem because everything is a coroutine.

    Is there any communities for programming language developers? Where do all the language developers meet up and talk theory and implementation? I am on eatonphil's discord and we talk there.

    One problem I am trying to understand how to solve is how you would write a multithreaded interpreter and language that allowed parallel interpretation similar to C# and Java. If the allocator is thread safe and you share an object pool between interpreters and you hash object equality by sourcecode, then you could send objects between threads with only a synchronization cost.

    I believe Python has the problem that object identity is different in each subinterpreter so you need to marshall the data.

What are some alternatives?

When comparing embedded-postgres and multiversion-concurrency-contro you can also consider the following projects:

greenlight - Clojure integration testing framework

electric - Local-first sync layer for web and mobile apps. Build reactive, realtime, local-first apps directly on Postgres.

postgresql-embedded - Embedded PostgreSQL Server

swift - the multiparty transport protocol (aka "TCP with swarming" or "BitTorrent at the transport layer")

testy - test helpers for more meaningful, readable, and fluent tests

supercollider - An audio server, programming language, and IDE for sound synthesis and algorithmic composition.

php-easycheck - Mirror of http://chriswarbo.net/git/php-easycheck

dictomaton - Finite state dictionaries in Java

ospec - Noiseless testing framework

hamt - A hash array-mapped trie implementation in C

datadriven - Data-Driven Testing for Go

multiversion-concurrency-control - Implementation of multiversion concurrency control, Raft, Left Right concurrency Hashmaps and a multi consumer multi producer Ringbuffer, concurrent and parallel load-balanced loops, parallel actors implementation in Main.java, Actor2.java and a parallel interpreter