That's a huge claim. My two super-basic questions, which I can't find answered on the site, are:
1) Let's say I need to join 100,000 rows in one table to 100,000 rows in another table, all matching ID's and indexed, and then SUM certain values in the second table. If Clustrix has distributed the rows/tables across different machines, how long is this going to take, compared to a single-machine solution?
2) How do transactions work on a single table? If four people are doing INSERT's with an AUTOINCREMENT on the same table, but on four different machines (because it's distributed), how is this going to wind up being faster than on a single server? How are the four new ID's not going to collide? And since presumably one machine is responsible for preventing collision, how does that machine not become a bottleneck?
I'd love to know what kind of advanced techniques can solve these problems.
You can get a better idea of how we scale distributed joins from one of my blog posts:
http://www.clustrix.com/blog/bid/242790/Scaling-Distributed-...
Once we complete the join, we will also perform the aggregate SUM operation across multiple nodes, getting individual sums, and then forwarding the results to another node for a final tally.
As a rule of thumb, each node has the throughput of about 70% of MySQL on the same hardware. So if you have a complex query that can take advantage of the cluster (100k rows per table examined qualifies), then you will see a 10x speedup on a 16 node cluster over a single instance.
However, that assumes that your entire data set fits in cache on the single instance box. As soon as that's no longer true, it's more likely that you will see a 100x or more speedup from Clustrix because you will have way more memory available for the buffer cache.
For example, if you have a 32GB single instance MySQL server, but you have more than 64GB of working set size, you're going to be limited by IO.
On Clustrix, if you move this to say a 4 node cluster, you are going to have an effective cache footprint of 128GB. So Clustrix will operate entirely out of cache.
2) We're fully ACID compliant using a two phase commit w/ PAXOS for transaction resolution. Because we're MVCC, readers never have to take out locks. To coordinate WRITE access to the same data, we have a row level distributed lock manager. That means that the entire cluster participates in lock management.
So yes, this has a higher communication overhead over a single server. If you have a small write workload with very little concurrency, you will see better query latencies from a single instance database.
However, as soon as you start getting to more serious write workloads with higher concurrency, Clustrix will distribute your writes across several machines in the cluster. We can handle an aggregate write throughput you can't touch with a single instance database, even with a fancy/expensive storage array.
One of our customers, for example, has a peak throughput of 70,000 transactions/sec. They're about 90/10 read/write, so that breaks down to 10,000 TPS for writes. And they are really fond of multi-row updates, insert .. ignore, insert .. on dup update kind of queries. So it's not exactly a lightweight key-value application. Prior to Clustrix, their MySQL installation peaked out at 5,500 TPS total (read+write). They now have a 15 node Clustrix cluster.
It's true, you can always construct a workload that will not distribute well. But these are generally rare degenerate cases that stem from poor application design, and would perform equally poorly on a single instance database.
Their bet was contrarian: embracing SQL -- specifically MySQL wire & dialect compatibility -- at a time when the open source options were trending toward NoSQL.
For funded start-ups with a calculable data-to-revenue ratio, Clustrix buys you the option for arbitrary future expansion while retaining the functional benefits of the RDBMS stack.
Once your product succeeds to a level where daily operational reporting is necessary, you'll appreciate the ubiquity of SQL: analysts and off-the-shelf tools all speak SQL without the overhead of glue code, data staging, or ETL.
I can also say that I've been participating in the private beta of this AWS version for a week now and it is both stable and performant. Although we use their appliance in production, I'm very excited about this AWS version as it allows us to run clustrix in our testing and staging environments (where we previously had to run mysql).
I think it's a really great thing that more people/companies will be able to use their awesome database without having to purchase an appliance.
Worked for an employer who used it. FAAANTASTIC. I met with the entire Executive team out in SFO on Friday, great company. I have never seen anyone take such care in doing massive QA (including month+ long regression testing on every generations of their platform)
and now there's Clustrix (which is cloud-mysql)
What's different about Clustrix compared to all the other distributed databases branding themselves as "NewSQL" is that it's intended for totally traditional OLTP workloads (though it can distribute OLAP queries across the cluster too as a bonus).
Disclaimer: I work there
http://www.informationweek.com/software/information-manageme...
Development of parallel query execution in PostgreSQL proper has been stagnant for quite a while unfortunately: http://wiki.postgresql.org/wiki/Parallel_Query_Execution
It's the kind of solution that works really well if you have key-value store problem where you want really low latencies. Telco call session state and session state for gaming comes to mind.
But beyond those use cases, you start running into a lot of architectural limitations...
We are a live event streaming company that expects several million viewers per event so something scalable/highly-available is what we're looking for.
fingers crossed for that 'invite'.
http://www.clustrix.com/blog/bid/242790/Scaling-Distributed-...
http://www.clustrix.com/Portals/146389/docs/clustrix_a_new_a...
If you have a secondary index say on user_location, and you want to query by that index, you don't know which shard to go to. So you end up broadcasting.
Another problem is enforcing unique index constraints.
With Clustrix, every table and index gets its own distribution.
So if you have a schema like this:
foo(a, b, c, d) unique idx1(b,c) idx2(d)
Clustrix treats each table and index as a different distribution. So if I need to look something up by d, I know exactly which node has the data. I can also enforce index uniqueness.
You can get a list of unsupported features and differences from our docs:
http://docs.clustrix.com/display/CLXDOC/Unsupported+Features
http://docs.clustrix.com/display/CLXDOC/Feature+Differences
Having said that, our customers find that the value that they get out of scale out, fault tolerance, and performance is worth the tradeoffs of not supporting every single MySQL feature.
Honestly, our goal is not to be 100% MySQL compatible. We're aiming to be compatible enough to capture a significant share of existing MySQL installs, but we're really after building a truly scalable relational db.
Why it's not in the features list? I thinks it's very cool.
About CAP theorem - which line is Clustrix for?
I hope that's next. :)