Hacker Newsnew | past | comments | ask | show | jobs | submit | zzsheng's commentslogin

check s3 express one zone


Still slow as hell, if you think 10ms is fast that’s a different story.


nop. we will not ack any write which is not in data or journal. please check the put details in the blog.


You initiate a write to the journal, but do not sync it before ACKing to the client.


journal file was pre-alloacated and we use direct-io for journal write so no need to call fsync.


Again, it is not durably persisted before acking to the client. Like I said earlier, that might be fine for your durability model, but it is unusual.


We would wait for Bss data and journal DirectIO and the acking (sending response back to api_server) in the callback function. What you are implying is what s3 actually doing and you can get see from their paper[1] and we are stronger than that.

[1]https://www.amazon.science/publications/using-lightweight-fo....


actually both crash consistentcy and durability. after we ack, we make sure data will be lost due to crash, restart or power loss.


sorry, typo. data will *not* be lost.


we also use direct-io for reads.


You have your own read cache then? You're nearly at the Oracle-level of writing your own filesystem at this point.


we manage memory instead of relying on page cache


thanks for feedback. actually it was pointed out in blog that we do not use append only log to avoid fsync due to size change. what we use is preallocate fixed size log file and we do write journal data and space reclaim by 4KB unit, also with direct-io.


Author here. This is not a general argument against fsync; the design depends on SSD-only deployment, preallocated files, O_DIRECT, single-key atomicity, and device write guarantees.


I'm surprised none of the design decisions considered an indirection between the folder tree structure and the actual files.

For example, if you map folders like /foo and /foo/bar to numeric IDs, then each file can simply refer their parent folder. Renaming a folder, or moving a folder to a new parent, does not need to update any files.

You can take this a step further and have a three-level split: Tree, file-tree join table, and files. The tree describes the hierarchical structure of folders (which changes more rarely than files do), while the file-tree join table is essentially [folder_id, file_id]. When a file is moved, only the join table (which is much smaller than the files and super sortable and compressible) must be updated.

I take the point that updating multiple discrete pieces of information puts more demand on the transactional layer, which has to ensure atomicity and consistency. But I'm surprised it wasn't even mentioned as an alternative that was evaluated and rejected. The article starts out with the premise that a flat key/value approach is the only choice on the table.


Your approach looks interesting but I was curious when you talk about path-based splitting for ART, do you literally mean always on "/"? I know S3 directory buckets always use /, but the classical S3 model had no natural separator character and I was wondering if supporting those styles of prefix or custom delimiter queries suffered any impediment in your approach.

Bookmarked your whole blog for later consumption, interesting stuff!


Thanks for the encouragement! Another author here. Yes, if you are interested you can check our another blog [1] for the internal storage engine. Yes, we are limiting the delimeter to "/", to better support posix FS semantics. I have just finished the fs feature branch which has passed all posix fstests [2].

[1] https://fractalbits.com/blog/metadata-engine-for-our-object-...

[2] https://github.com/pjd/pjdfstest


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: