1,938 karma · joined September 7, 2011
gmail: max.t.mcdonnell
github.com/maxmcd
Threads+locking introduce data race issues into Harmony's model. As far as I can tell.
The programming language incorporates thread+locking mechanisms.
so does router.blockdh100c.co
"This software let's you set up peer to peer networking between your devices, expose them to the internet, run applications on them, view useful runtime information, and integrate easily with cloud providers and infrastructure you're familiar with."
Clickhouse performance for Postgres workloads?
Your new service will come up, but it won't be able to get the write lease until the previous server shuts down. Now you have tools to detect this, stop one writer, and start the other, but the service will likely have to experience some kind of requests queueing or downtime.
Really nice to see this, I wrote this comment almost 2 years ago when I was a little miffed about trying to use litestream and litefs: https://news.ycombinator.com/item?id=37614193
I think this solves most of the issues? You can now freely run litestream on your DB and not worry about issues with multiple writers? I wonder how the handoff is handled.
The read replica FUSE layer sounds like a real nice thing to have.
edit: Ah, it works like this: https://github.com/benbjohnson/litestream/pull/617
> When another Litestream process starts up and sees an existing lease, it will continually retry the lease acquisition every second until it succeeds. This low retry interval allows for rolling restarts to come online quickly.
Sounds workable!
I wonder if something similar will happen here.
@eieio please open source the Go code, would be fun to poke at.
https://www.val.town/x/geoffreylitt/stevensDemo/code/importe...
I think it would be pretty easy to extend to support other types of inbound email.
Also I work for Val Town, happy to answer any questions.
$ git clone git@github.com:Sahilb315/AtomixDB.git
Cloning into 'AtomixDB'...
$ cd AtomixDB/
$ go run .
Welcome to AtomixDB
Available Commands:
CREATE - Create a new table
INSERT - Add a record to a table
DELETE - Delete a record from a table
GET - Retrieve a record from a table
UPDATE - Update a record in a table
BEGIN - Begin new transaction
COMMIT - Commit transaction
ABORT - Rollback transaction
EXIT - Exit the program
> create
Enter table name: foo
Enter column names (comma-separated): bar,baz
Enter column types (comma-separated as numbers): 1,2
Enter indexes (format: col1+col2,col3, ... or leave empty):
Table 'foo' created successfully.
> get
Enter table name: foo
Select query type:
1. Index lookup (primary/secondary key)
2. Range query
3. Column filter
Enter choice (1, 2 or 3):
It looks like records are stored in rows: https://github.com/Sahilb315/AtomixDB/blob/64c95afa8e574595c...I do find the source to be well organized and quite readable. Especially if you runs the commands in the cli and then trace how they are each implemented.
This was definitely an "easier for us to run, good for the product experience" decision. Freedom comes elsewhere :)
~/go/src/github.com/voidDB/voidDB git:(master)
$ go run github.com/tailscale/depaware@latest
github.com/voidDB/voidDB dependencies: (generated by github.com/tailscale/depaware)
github.com/voidDB/voidDB/common from github.com/voidDB/voidDB+
github.com/voidDB/voidDB/cursor from github.com/voidDB/voidDB
github.com/voidDB/voidDB/free from github.com/voidDB/voidDB
github.com/voidDB/voidDB/node from github.com/voidDB/voidDB+
github.com/voidDB/voidDB/reader from github.com/voidDB/voidDB
golang.org/x/sys/unix from github.com/voidDB/voidDB+
bytes from github.com/voidDB/voidDB+
cmp from internal/fmtsort+
encoding/binary from github.com/voidDB/voidDB/common+
errors from bytes+
D fmt from golang.org/x/sys/unix
hash from github.com/voidDB/voidDB+
hash/fnv from github.com/voidDB/voidDB
io from bytes+
io/fs from internal/filepathlite+
iter from reflect+
math from encoding/binary+
math/bits from golang.org/x/sys/unix+
os from fmt+
path from io/fs
reflect from encoding/binary+
slices from encoding/binary+
LD sort from golang.org/x/sys/unix
strconv from fmt+
LD strings from golang.org/x/sys/unix
sync from encoding/binary+
sync/atomic from internal/bisect+
syscall from github.com/voidDB/voidDB/cursor+
time from github.com/voidDB/voidDB+
unicode from bytes+
W unicode/utf16 from internal/poll+
unicode/utf8 from bytes+This works in a lot of cases. In some cases this might not address your bottleneck.
Also someone should write a real, performant, in-memory postgres storage driver. Then we can all be happy (with pg at least).
For this clickhouse wide event lib I'm working on (not worth anyones time atm) I am still using this schema https://www.val.town/v/maxm/wideLib#L34-39 (which is from a Boris Tane talk https://youtu.be/00gW8txIP5g?t=801) for good multi-tenant performance.
I hope clickhouse performance here can still be vastly improved, but I think it is a little awkward to get optimal performance with wide events today.