Show HN: Kvass, a personal key-value store

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

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
  • kvass

    a personal key-value store

  • Hi mbreeze!

    > this seems to just be a SQLite database with values in fields?

    Sqlite is used as a storage format ("SQLite competes with fopen()"). The key-value pairs are stored as a modified Append-Only CRDT. The LUB-Operation (to merge to states while syncing) is implemented here: https://github.com/maxmunzel/kvass/blob/e32fdabdc86b039f716c...

    > anyone with access to the file would be able to see all data stored?

    Yes, attackers with access to your fs are not part of my attacker model. I rely on disk encryption for that matter.

    > Do the clients cache data locally? It looks like you're basically syncing from the server for every request. You're already making a round trip to the server for a request anyway, so why not keep state only on the server? I can understand an offline-only mode, but this would require a significantly more robust sync mechanism. If this was the goal, I'd love to see this discussed more in the README too.

    The sync mechanism is actually pretty solid, as its based on CRDTs. One of the applications of kvass is central management of config files, so automatic syncing and offline fallback are important.

    > What is the purpose of the ProcessID?

    The Counter Variable implements a rudimentary implementation of Lamport clocks. To get a total order from Lamport clocks, you need ordered, distinct process ids. The process id's don't really need to mean anything and the Lamport clock is itself just a fallback for the case that the wall-clock timestamps collide (see the Max() function), so it's practical to just draw them randomly.

    > I didn't see any authn/authz in the requests. You're also unmarshalling random data from the request w/o confirming that it is valid first. This seems risky to me and could potentially crash the server if I were to send it random data.

    Authentication is provided by the GCM mode of AES. As I decrypt (and thereby verify) early, I can assume to work on trustworthy payloads. GCM is also non-malleable unlike for example CBC or CTR.

    As suggested by losfair, I'll switch to PSK TLS as soon as it's available or just put HTTPS in front of the end-points. But that's not high-priority right now.

  • go

    The Go programming language

  • TLS is available in pre-shared key (PSK) mode. Looks like there is ongoing work to add TLS-PSK to Go's standard library: https://github.com/golang/go/issues/6379#issuecomment-117006...

  • 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.

    InfluxDB logo
  • badger

    Fast key-value DB in Go.

  • Curious why you chose sqlite instead of something like [badger](https://github.com/dgraph-io/badger) given you expose it as a key value database, which badger is.

  • passff

    zx2c4 pass manager extension for Firefox, Chrome and Opera

  • browserpass-extension

    Browserpass web extension

  • pass-import

    A pass extension for importing data from most existing password managers

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • TypeScript dev tools in the Golang world

    1 project | dev.to | 1 May 2024
  • Why SQLite Uses Bytecode

    3 projects | news.ycombinator.com | 30 Apr 2024
  • Using migrations with Golang

    5 projects | dev.to | 17 Apr 2024
  • The power of the CLI with Golang and Cobra CLI

    9 projects | dev.to | 6 Apr 2024
  • Map of Golang Key Value Engines

    1 project | news.ycombinator.com | 21 Jan 2024