News for hackers. Stuff that matters.
Re:ArangoDB: Multi-model highly available NoSQL database by andrewstuart on Wednesday January 16, 2019 @06:18PM (#18926566)
I like Arango but these days it's very hard for a database to compete with Postgres which is incredibly powerful.

Every time I've bet against Postgres and used some other data storage mechanism, I always come back to Postgres.

Re:ArangoDB: Multi-model highly available NoSQL database by neunhoef on Thursday January 17, 2019 @04:27AM (#18929479)
Disclaimer: I am one of the core developers of ArangoDB and I work for the company ArangoDB.

Yes, ArangoDB is young (6 years) in comparison to PostgreSQL (30 years).

Yes, PostgreSQL is a phantastic database with an amazing open source community and is not going away any time soon.

Yes, PostgreSQL is a good choice for a project in which you need a relational single server database.

However, ArangoDB actually has a different value proposition, so in a sense, it is not a direct competitor.

ArangoDB is native multi-model, which means it is a document store (JSON), a graph database and a key/value store, all in one engine and with a uniform query language which supports all three data models and allows to mix them, even in a single query.

Furthermore, ArangoDB is designed as a fault-tolerant distributed and scalable system.

In addition it is extensible with user defined JavaScript code running in a sandbox in the database server.

Finally, we do our best to make this distributed system devops friendly with good tooling and k8s integration.

Last but not least, ArangoDB is backed by a company which offers professional support.

Therefore any well informed decision for a project needs to look at the value propositions and capabilities and not only at the age and experience, which is of course a big argument, since people are - rightfully so - conservative with their databases.

Re:ArangoDB: Multi-model highly available NoSQL database by djupblue on Thursday January 17, 2019 @10:07AM (#18931250)
>is designed as a fault-tolerant distributed and scalable system

What is the consistency model and have you validated that it actually works as designed (for example with Jepsen)? I didn't find anything detailed on your website.

Re:ArangoDB: Multi-model highly available NoSQL database by manigandham on Wednesday January 16, 2019 @06:31PM (#18926692)
The main thing to compete on is distributed scale-out and high-availability which PostgreSQL does not have a good answer for.
Re:ArangoDB: Multi-model highly available NoSQL database by zbentley on Wednesday January 16, 2019 @08:51PM (#18927622)
That's absolutely true. However, most systems that think they need scale-out are either worrying about a problem they don't have yet, suffering performance problems due to poor database design, or have not fully explored logical (dynamic or hash-based) sharding as a solution to their problems.

A huge proportion of modern software businesses can run on single-writer RDBMS instances, properly engineered, at a fraction of the operational and implementation cost of a scale-out solution. That applies to hosted and self-managed solutions equally, in my experience.

Re:ArangoDB: Multi-model highly available NoSQL database by manigandham on Thursday January 17, 2019 @01:31AM (#18928815)
Sure, but scale isn't everything. Operations are far more important, especially when you're a small team.

Modern distributed databases scale better but also have better replication, high-availability with automatic failover and no downtime, easier upgrades, easier backups, and generally less maintenance. Removing the single-point of failure with efficient distribution while being able to run easily on docker/kubernetes makes a big difference over a single monolithic database server.

Re:ArangoDB: Multi-model highly available NoSQL database by zorga on Wednesday January 16, 2019 @11:44PM (#18928442)
The desire is generally for high availability now and ability to scale out in the future; while a single write db is generally more than enough performance wise, it doesn't give you high availability which is the main desire.
Re:ArangoDB: Multi-model highly available NoSQL database by lykr0n on Wednesday January 16, 2019 @06:36PM (#18926737)
CitusDB for sharding & replication. Patroni & Stolon for automated replication. Not native solutions, but are an answer.
Re:ArangoDB: Multi-model highly available NoSQL database by contrahax on Wednesday January 16, 2019 @06:43PM (#18926787)
CitusDB has a ton of limitations on your schema/table structure right now. Over time it has gotten better, so hopefully in the future it will be a true drop-in scale out solution. Specifically some types of relationships + indexes are not supported.
Re:ArangoDB: Multi-model highly available NoSQL database by doh on Wednesday January 16, 2019 @07:16PM (#18927087)
True, but as you said, the compatibility is quickly increasing. They actually did a great job and there is fairly little that is not compatible, usually on very advanced side (which is exactly what we would love to have), but the team is especially good at what they are doing and believe they will get there sooner than later.
Re:ArangoDB: Multi-model highly available NoSQL database by lykr0n on Wednesday January 16, 2019 @06:49PM (#18926839)
Oh yeah totally; it's a slow march forward. MySQL Galera took some time before it was ready for serious use, but the fact that it's semi-usable is awesome.
Re:ArangoDB: Multi-model highly available NoSQL database by manigandham on Wednesday January 16, 2019 @07:35PM (#18927218)
Citus only does sharding, not replication. Either way, this is a fundamental design limitation with traditional single-master relational systems.
Re:ArangoDB: Multi-model highly available NoSQL database by bsg75 on Wednesday January 16, 2019 @11:25PM (#18928377)
Re:ArangoDB: Multi-model highly available NoSQL database by manigandham on Thursday January 17, 2019 @01:18AM (#18928785)
Yea, that's just normal Postgres replication, nothing to do with Citus.
Re:ArangoDB: Multi-model highly available NoSQL database by tpetry on Thursday January 17, 2019 @03:27AM (#18929248)
Citus is doing sharding and replication: Citus will shard your data and place every shard on e.g. 3 servers. So one server dying is no problem because the data is replicated 2 times.
Re:ArangoDB: Multi-model highly available NoSQL database by manigandham on Friday January 18, 2019 @10:57AM (#18940143)
Ah I see that now. However that's not by default and it still only applies to "distributed" tables, not all the data in the database. Combined with a single-master, it's nowhere near the replica functionality provided by natively distributed storage systems.
Re:ArangoDB: Multi-model highly available NoSQL database by jbergens on Thursday January 17, 2019 @06:29AM (#18929979)
Do they have ACID transactions around writing to all 3 servers? Doesn't that cause bad performance?

You might also end up with a LOT of servers unless you starting sharing servers for different shards (but still with different sets of 3 servers for every shard).

Re:ArangoDB: Multi-model highly available NoSQL database by 75dvtwin on Thursday January 17, 2019 @12:36AM (#18928635)
what about PostgresXL. it is a release v behind Postgres. But it has ACID and cluster. I do not have personal experience with it, but would be interested to hear what folks say.

Overall, I agree -- PG with JsonB is extraordinary powerful system, covering document oriented and typical row-oriented use cases.

PGs ecosystem with external foreign interfaces, and in memory streaming solutions (like PipelineDB) - must be an envy of any other db ecosystem.

Re:ArangoDB: Multi-model highly available NoSQL database by _Codemonkeyism on Thursday January 17, 2019 @03:57AM (#18929362)
Valid point, for 99% of startups scaling on one machine (todays SSD based multi core, GB memory hardware is very powerful) with read slaves and failover (Patroni) works just fine. Many I meet as a consultant though want to scale out when they have 100 customers.
Re:ArangoDB: Multi-model highly available NoSQL database by _Codemonkeyism on Thursday January 17, 2019 @03:54AM (#18929350)
My two wishes for Postgres (as a fanboy):

1. Unify JSON and SQL syntax, instead of user->>'email' make it user.email

2. Support sub tables, so I can decide if I want a sub table (schema) or JSONB (schema-less)

Re:ArangoDB: Multi-model highly available NoSQL database by TheJeebus on Wednesday January 30, 2019 @12:42PM (#19037295)
Problem is that JSON property names can contain '.', so it would be ambiguous.
Re:ArangoDB: Multi-model highly available NoSQL database by thdxr on Wednesday January 16, 2019 @07:01PM (#18926944)
Postgres' inability to handle multiple concurrent queries on a single connection makes it a pain when using it for multi-tenant services. With all the SAAS companies out there I'm surprised this issue doesn't get brought up more often
Re:ArangoDB: Multi-model highly available NoSQL database by doh on Wednesday January 16, 2019 @07:11PM (#18927036)
I'm not sure it's that critical. You can use connection pooling on client and/or you can outsource it to a proxy/bouncer that will do this for you.

We have tens of thousands of connections and no problems. We also forked pgbouncer to use multicore [0] which allows us properly utilize servers.

[0] https://github.com/Pexeso/pgbouncer-smp

Re:ArangoDB: Multi-model highly available NoSQL database by thdxr on Friday January 18, 2019 @08:53AM (#18939266)
PGBouncer doesn't do anything to magically prevent connections to postgres from being locked and idle for a pending query.

It's just an external connection pooler when your native language driver doesn't have a good one

Re:ArangoDB: Multi-model highly available NoSQL database by doh on Friday January 18, 2019 @11:29AM (#18940414)
pgb can timeout connections and close them if they are idle for too long, which is usually the way to deal with stale connections.

Not sure what solution are you imagining would be the right one.

Re:ArangoDB: Multi-model highly available NoSQL database by thdxr on Sunday January 20, 2019 @03:08AM (#18951842)
Examine any other distributed system that implements pipelining. Allows for multiple pending requests on a connection (simply by having IDs on every request) which makes for efficient use of connections.
Re:ArangoDB: Multi-model highly available NoSQL database by doh on Sunday January 20, 2019 @03:50PM (#18955492)
I do understand where are you coming from, but there is price to everything.

Most distributed systems have eventual consistency. Very few can achieve strong consistency. Postgres sacrifices a lot for a strong consistency and predictable performance.

I'm not saying that PG has the best model, but for the wast majority of users, out of connections is just not an issue. Most clients have now direct pooling and they are very easy to setup. There are a few who need more connections, but there are poolers for it.

What you gain but separating connections is much easier monitoring and debugging process. You can examine each connection, its impact on resources, state, what locks they need to acquired, ...

Additionally, because each connection opens a file descriptor, you gain a lot of operating security from the underlying OS and its kernel.

PG contributors spent almost 3 decades building on this system. I'm pretty sure the gain would be so minuscule in comparison to the effort that would have to be put in to rebuild the connection model.

I for one would appreciate server polling built in, better HA including simple discoverability, handoffs, ...

Re:ArangoDB: Multi-model highly available NoSQL database by ahachete on Thursday January 17, 2019 @05:36AM (#18929749)
That's really cool! But why don't you contribute back this code to pgbouncer? :)
Re:ArangoDB: Multi-model highly available NoSQL database by doh on Thursday January 17, 2019 @02:40PM (#18933858)
Oh, we tried. Believe me, we tried many times. Original pgb creator didn't bother to respond to any of my emails.
Re:ArangoDB: Multi-model highly available NoSQL database by zbentley on Wednesday January 16, 2019 @08:55PM (#18927640)
That's because connections (sessions, really, but in practice most things map those 1:1) are the primitives on which Postgres and most other RDBMSes divide their units of transactional consistency--one of their key guarantees. Connections are expensive to create and maintain largely (but not entirely) because of those properties.
Re:ArangoDB: Multi-model highly available NoSQL database by thdxr on Friday January 18, 2019 @08:51AM (#18939255)
This isn't a required design to achieve transactional consistency. See for example how this would be done in Erlang - single connection dispatching to isolated Erlang processes.

Fundamentally just needs isolation to be done at a different layer.

Re:ArangoDB: Multi-model highly available NoSQL database by andrewstuart on Wednesday January 16, 2019 @07:08PM (#18927007)
Why not just open another connection?
Re:ArangoDB: Multi-model highly available NoSQL database by chatmasta on Wednesday January 16, 2019 @11:14PM (#18928331)
Each open postgres connection requires about 10mb of memory overhead IIRC
Re:ArangoDB: Multi-model highly available NoSQL database by grumpydba on Thursday January 17, 2019 @02:07AM (#18928950)
That's why you need a connection pool. That's true for all database systems.
Re:ArangoDB: Multi-model highly available NoSQL database by cbsmith on Thursday January 17, 2019 @02:37AM (#18929063)
Not all databases systems require a connection pool, though it is often a good idea.
Re:ArangoDB: Multi-model highly available NoSQL database by grumpydba on Thursday January 17, 2019 @03:04AM (#18929162)
I disagree. I've faced incidents on oracle/sql server/postgres/sybase instances when several hundreds of connections where spawned.

You definitely need to think about pooling fro the beginning of the design of your application.

Re:ArangoDB: Multi-model highly available NoSQL database by cbsmith on Thursday January 17, 2019 @04:37AM (#18929516)
Yes, all of those databases allocate query memory for queries at connection time, and consequently don't scale efficiently for large number of idle clients. That's not all databases. Some don't do that. Some don't even do connections period.

Connection pools are a necessary work around for a specific design decision with the system software. They can be helpful other problems as well, but they aren't necessarily a requirement.

Re:ArangoDB: Multi-model highly available NoSQL database by porker on Thursday January 17, 2019 @03:11AM (#18929190)
Postgres is powerful, I want a row in a table to have a relationship to one or more rows in _any other table_ in the database, and Postgres can't help with that.

That to me is a compelling reason to use something other than Postgres.

Re:ArangoDB: Multi-model highly available NoSQL database by ralusek on Thursday January 17, 2019 @03:57AM (#18929360)
There are a few solutions to what you're proposing which might help.

One solution is to have a generic reference property paired with another indicating which table to reference

    reference_id: '1234',
    reference_table: 'posts'

    reference_id: '4321',
    reference_table: 'comments'
You can still benefit from indexes for joins in the same way that you would with actual foreign key constraints, but the downside with this is that you can't actually apply a foreign key constraint.

Another solution you can look into, which I don't have much experience with myself, is table inheritance: https://stackoverflow.com/questions/3074535/when-to-use-inhe...

Another form of modeling the data in such a manner is called Exclusive Arc, which is that you just simply put all of the possible keys you might reference on the table, and add a foreign key on all of them. Then, when you need to make a reference, you just leave all but the one in use on that row as null values. If a "like" can go on a "post" or a "comment" or an "image", you would just have all 3 foreign key columns/constraints on the "like" table.

And lastly, and probably best of all, is to simply use 1-2 tables for your entire data model for vertices/edges, and just treat Postgres as a graph database.

Re:ArangoDB: Multi-model highly available NoSQL database by porker on Thursday January 17, 2019 @04:21AM (#18929448)
> One solution is to have a generic reference property paired with another indicating which table to reference

> You can still benefit from indexes for joins in the same way that you would with actual foreign key constraints, but the downside with this is that you can't actually apply a foreign key constraint.

Thanks, I had not thought JOINs possible on this - how would a query look? I'm guessing it works only for one type of reference_table.

> Another solution you can look into, which I don't have much experience with myself, is table inheritance: https://stackoverflow.com/questions/3074535/when-to-use-inhe....

Been there, tried it, banged my head on most of these (particularly the FK limitation): https://www.postgresql.org/docs/11/ddl-inherit.html :)

If it was fixed by Postgres it'd be awesome. I've lost the wiki page which was around on the topic, but it was unchanged for ~10 years, so really should've been marked 'wontfix'.

> Another form of modeling the data in such a manner is called Exclusive Arc,

> And lastly, and probably best of all, is to simply use 1-2 tables for your entire data model for vertices/edges, and just treat Postgres as a graph database.

That's what I'm doing, with the 'node' table using JSON to store the node-specific data. I feel sooooooo dirty but it works. Yet to figure out schema evolution of the JSON in a controlled manner :)

Re:ArangoDB: Multi-model highly available NoSQL database by ralusek on Thursday January 17, 2019 @04:39AM (#18929527)
> Thanks, I had not thought JOINs possible on this - how would a query look?

So this is for the structure with the two columns

    reference_id: '1234',
    reference_table: 'posts'

    reference_id: '4321',
    reference_table: 'comments'
So let's say that this is the `likes` table that can like either `comments` or `posts`, here are some queries:

    // Get comments and their respective likes
    SELECT * from comments
      JOIN likes ON comments.id = likes.reference_id;

    // Get posts and their respective likes
    SELECT * from posts
      JOIN likes ON posts.id = likes.reference_id;

    // Get likes and their referenced comments
    SELECT * from likes
      JOIN comments ON comments.id = likes.reference_id;
And so on.
Re:ArangoDB: Multi-model highly available NoSQL database by pddpro on Thursday January 17, 2019 @02:36AM (#18929058)
Any resources you'd like to recommend to a beginner that comprehensively covers all aspects of Postgres?
Re:ArangoDB: Multi-model highly available NoSQL database by brylie on Thursday January 17, 2019 @10:58AM (#18931733)
PostgreSQL Tutorial covers many fundamentals:

http://www.postgresqltutorial.com/