For the best experience on desktop, install the Chrome extension to track your reading on news.ycombinator.com
Hacker Newsnew | past | comments | ask | show | jobs | submit | history | thinkx's commentsregister

monumental? OrioleDB works anywhere where you are running your own self-managed Postgres instance.. be it on bare-metal, or VMs, or EC2.

this is NOT a new database


OrioleDB is based on earlier work done in the core Postgres to introduce a storage extension framework called Table Access Methods.

This phase adds significant enhancements to make the OrioleDB extension feasible and aggressively performant.. and the delta code to be committed upstream is less than 2K LOC.

Comparing this project to earlier forks that got stuck at 7.x and 8.x would be a huge disservice to the maturity and extensibility of the Postgres project.

On your latter point, OrioleDB does not “replace” the built-in storage engine (which works quite well for many many use-cases), it “augments” the core capabilities with an additional storage engine optimised for many use-cases where the legacy engine struggles.

HTH


> .. and the delta code to be committed upstream is less than 2K LOC.

Then mainline it?

The last commit that /postgres/postgres and /orioledb/postgres share (1) is 6 months old for 15.2?

I mean, this is literally what I'm pointing out in my comment; you're chasing a moving target. Every change postgres makes, you have to merge in check it doesn't conflict, roll out a new patch set...

...and, you're already falling behind on it.

So, going forward, how do you plan to keep up to date...? ...because it looks to me, like a < 2K LOC isn't a fix for this problem; it hasn't solved it for you, as time goes forwards, it will continue not to be a solution to the problem; annd...

> Currently the changes needed to Postgres core are less than a 1000 lines of code. Due to the separate development schedules for Postgres and OrioleDB, these changes cannot be unstreamed in time for v.15. (2)

^ They were < 1000 lines a year ago, apparently. So the problem is getting worse over time.

Seems like the solution is mainlining those changes... not just intending to mainline them.

Until then... I really just see this as a postgres fork.

[1] - https://github.com/postgres/postgres/commit/78ec02d612a9b690... vs https://github.com/orioledb/postgres/commit/78ec02d612a9b690...

[2] - https://github.com/orioledb/postgres/issues/2


stay tuned, there is a concerted effort to bring this area up to standards too.. more details will be discussed at the upcoming PGCon Ottawa and you will blogs on this subject in the latter half of the year


Coming to Postgres, UNDO logs and no vacuum

https://github.com/orioledb/


what is an UNDO log and how does it solve the problem?


In most cases[1], when you update a tuple in Postgres, a new tuple is put somewhere else in the same heap, with different visibility information, "xmin", "xmax". The old tuple remains where it is. Index pointers to it likewise remain unchanged, but a new entry is added for the new tuple. The old version gains an updated "xmax" field indicating that version was deleted at a certain logical point.

Later on, VACUUM has to plow through everything and check the oldest running transaction to see whether the tuple can be "frozen" (old enough to be seen by every transaction, and not yet deleted) or the space reclaimed as usable (deleted and visible to nothing). Index tuples likewise must be pruned at this time.

In systems with an UNDO log, the tuple is mutated in place and the contents of the old version placed into a sequential structure. In the case where the transaction commits, and no existing concurrent repeatable read level transactions exist, the old version in the sequential structure can be freed, rather than forcing the system to fish around doing garbage collection at some later time to obsolete the data. This could be considered "optimized for commit" instead of the memorable "optimized for rollback."

On the read side, however, you need special code to fish around in UNDO (since the copy in the heap is uncommitted data at least momentarily) and ROLLBACK needs to apply the UNDO material back to the heap. Postgres gets to avoid all that, at the cost of VACUUM.

[1] The exception is "HOT" (heap only tuple) chains, which if you squint look a tiny bit UNDO-y. https://www.cybertec-postgresql.com/en/hot-updates-in-postgr...


take a peek at https://github.com/orioledb/orioledb if the Uber blog is your frame of reference


we’d love to test this scenario with the new OrioleDB storage engine for Postgres.


only the additional “hooks” for Table Access Methods need to get up streamed into the core Postgres. OrioleDB is a separate storage engine and not designed to replace the current engine, and be used as an adjunct storage option


important distinction - this uses the Postgres Table Access Method to add an additional storage engine to the Postgres platform.. this is NOT a replacement for the current storage engine and can co-exist and be used on a per-table basis


Find out who has invested in EDB, the leading Postgres vendor in the market. Postgres is a foundation, so there is no central entity to invest in.


Postgres has a core design philosophy of being “extensible”. This should be embraced..


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

Search:

HN For You