[Discuss] Rob Conery's critique of MySQL?

Mark Woodward markw at mohawksoft.com
Thu Aug 2 22:57:25 EDT 2012


On 08/02/2012 08:44 PM, Richard Pieri wrote:
> On 8/2/2012 4:36 PM, Mark Woodward wrote:
>> Not to be snide, but 8 million is not a big number.
>
> That's 8 million patients.  Multiply that by everything that the VA 
> has on each and every one of them and you get a very large data set.
>
> It's not the largest data set that I'm aware of.  The largest is the 
> data out of the LHC which is around 200 petabytes.  CERN went the 
> other way.  They started with an object databases but eventually 
> dropped it due to poor market development OODBMSs. They currently use 
> relational databases for storing and retrieving metadata.  Bulk data 
> is stored in flat files.
>
>
>> Well, "billions" of transactions per day should be doable in a cluster.
>
> That's what Ameritrade and Oracle thought but they couldn't make it work.
>
>> If your oracle database is crashing, it is misconfigured.
>
> The Oracle techs working with Ameritrade couldn't keep the cluster 
> going.  They eventually gave up when Ameritrade wouldn't commit to 
> replacing the entire cluster with bigger servers.
Ahhh Bingo! We have the problem.
>
>> Financial
>> transactions are a dangerous thing, you really do need ACID for
>> fiduciary responsibility.
>
> Cache' delivers full ACID guarantee.  I told you I wasn't talking 
> about NoSQL/MongoDB.
>
Cool. Cache' is an interesting system, and there are pros and cons to 
using it of course. Suffice to say, if you don't need precisely what it 
provides, you wouldn't buy it.
>
>> You are avoiding the topic, the "storage system," is separate from the
>> implementation of the objects. The objects know how to serialize and
>> restore themselves as well as upgrade. The storage and location of
>> objects is not involved.
>
> Of course I am.  It's not relevant to the topic, which is the 
> technical merits of object vs relational databases.
You are arguing semantics. An RDBMS is just a data store as is an object 
based db. Now, clustering an RDBMS system has the same set of problems 
as clustering an object store. In the end, they are just storing data. 
The "scaling" part is, of course, product specific and each system 
implements clustering differently, but in the end its just data going on 
to disk in an order that is retrievable. Hopefully with ACID compliance.

>
>
>> That is not a "how," it is a adjective and a plural noun. One does not
>> need to use relations in a database, but one has them if they need them.
>> An RDBMS is a tool not some kind of mandate.
>
> Then why bother with a relational database at all?
Who's bothering?
> The singular strength of a relational database is the relations 
> between data.
This is No-SQL nonsense. The strength of an RDBMS is the man-centuries 
of work and science embodied in retrieving data. The relational 
capability is a very powerful tool, sure, but in the end the real 
science is finding the data you want.

> If you don't use relations then the relational database is the wrong 
> tool for the job.
This is absolutely incorrect. Relations are a feature not the sole 
purpose. Finding specific data in a large data set is no easy task. Take 
this SQL query:

select * from songs where artist = 'various';

A songs table can have many millions of entries, and a good percent of 
them will have artists as 'various' because the come from collections. 
Now, a good RDBMS will understand that it is probably faster to ignore 
the index. Now take this query:

select * from songs where artist = 'Joe Kidd'
Then the system will find only a few songs and the RDBMS will understand 
that it should use the index.

Note that these are not relational queries. There are no joins, but SQL 
is used to find the data.

Despite what you say, and object store is a data graveyard if it does 
not support aggregation or location of data. Data has no value if it can 
not be processed. Chances are the object stores will be dumped to an 
RDBMS for OLAP. My argument is why bother with the object store?

>
>
>> Yes, ok, that is done with the XML/JSON class description. What's the
>> problem?
>
> The problem is that you're stuck with tables.  You don't have an 
> object.  You have an object stored in a table.  Even if it is a table 
> with a single column and a single row it's still a table.
>
>
>> If I said the XML was stored in a binary polymorphic object file and it
>> could be retrieved by its ID, would that make a difference? Because,
>> that is exactly what is happening. For convenience, we call the the
>> polymorphic object file a "table."
>
> Sure, that works.
OK, then you see my point.
> Again, why bother with a relational database if you want to 
> short-circuit all of the relational functions?
Because A "Relational Database Management System" is a super set of 
"Database Management System." You need some sort of DBMS on which to 
base an object store, and PostgreSQL gives you the "R" for free.


> Which was my original point: why bother with inferior tools like 
> relational databases when superior tools like object databases are 
> available?
Because object stores are not superior, they are, by definition, 
inferior. A good RDBMS can do the job of an object store easily *AND* do 
far far more.

>
>
>> Sorry, no. It is either a hash table, or they are hiding the index from
>> you. Either way, it doesn't matter because databases have hash indexes.
>
> Nope.  Binary trees or multidimensional arrays.  Typically, an object 
> database doesn't cache index data which it doesn't have. It caches 
> objects.
Btrees are not O(1) they are O(log n). Multidimentional arrays are only 
O(1) if they are in memory, after that, they hit disk and that is what 
ever the file system gives you.

caching is a different topic all together *every* RDBMS caches both 
index and data. And, by the way, if your object store has a btree, it 
has an "index." It may not call it that, but that is what it is.


>
>> And if you say that objects don't need that kind of indexing, then you
>> miss the real power of database. If you have 8 million objects, say
>> patients in a database. How do you find them by social security numbers?
>> How about by last name? How about by symptoms?
>
> You walk a balanced b-tree.  The worst case for a binary tree search 
> is O(log n).  Then the patient object is loaded into cache and data 
> access times drop to O(1).
Ahh, yes, the magic of caching. *Every* RDBMS has that.
>
>>> Better performance,
>> How? Prove it.
>
> O(log n) typical worst case for object searches vs. O(log n) typical 
> best case for relational searches.
The O(log n) for object searches is typical for any object not in cache. 
That statistic I agree with. Worst case, yes, but also I bet, typical 
for initial find. Getting the same object multiple times out of an 
object store should be near O(1) as long as it remains in cache. Agreed.

" O(log n) typical best case for relational searches" Nice little 
linguistic game there. This is wrong.
The query:

select object_data from objects_table where object_id = 'id';

Will have an O(log n) for the initial find, just as an object store. 
Furthermore, it will have a near O(1) behavior the subsequent finds 
because RDBMS cache too.
> In real applications object searches are 2-20 times faster than 
> comparable relational searches.
Then you are doing it wrong, there is no technical reason to believe 
this assertion, in fact, many RDBMS have different indexing options to 
optimize this sort of search. Hash indexes will have near O(1) + I/O for 
objects out of cache.

>
>>> greater scalability,
>> How? Prove it.
>
> Ameritrade.
I would need a full analysis of what happened there to say whether or 
not it was a scalability issue and why. Yes, it is well understood that 
an application designed for a specific narrow task is generally better 
at that task than one which is designed to be general purpose, however, 
a general purpose tool is by definition a better tool for most tasks.

Scalability is a complex problem, there is no boiler plate solution.

>
>>> faster deployment,
>> How? Prove it
>
> The VA Hospital's ahead of schedule and under budget deployment.
Again, I've had plenty of projects that go faster because of PostgreSQL, 
but that is anecdotal evidence. What are the reasons why it is "faster 
deployment?" What features do an object store have that makes it faster?

>
>
>>> easier
>>> maintenance,
>> How? Prove it
>
> Admittedly it is company propaganda, but case studies from 
> InterSystems' customers show that Cache' is easier and faster than 
> Oracle for application development and support.
I've seen lots of company propaganda, I believe none of it. Speaking 
from experience, almost *anything* is easier to maintain than Oracle. 
Its a beast. However, that isn't an RDBMS issue, that is a stupid larry 
ellison product issue.

Why is it easier? What features make them easier?

>
>>> and typically at a lower cost for all of it.
>> PostgreSQL is free. It doesn't get much lower in cost.
>
> Hardware, sysadmins, DBAs, application developers, test teams. All 
> these cost money.  If you can deliver an application on leaner 
> hardware then you reduce cost.  If you can deliver it in less time 
> then you reduce cost.
Again, I don't agree. You need all these things for any system you 
deploy. Even if I agreed with the leaner system requirements, which I 
don't, that is a negligible cost differential and one which is made up 
by reduce learning curve of developers and test teams already knowing 
SQL and the tools available for SQL.
>
>
>> No, I needed a DNS system that could replicate, allow user access,
>> managed rights and privileges, etc. I could coble something together, or
>> use a package that worked out of the package. It was a no brainer.
>
> I implemented something similar at a previous gig using shell scripts. 
> It worked perfectly.  It was a no-brainer.  And that's still my own 
> confirmational bias speaking.
>
>
>> I do have some expertise in PostgreSQL, sure, but I always try to find
>> the best tool for the task. I have used SQLite and I have done a fair
>> amount of storage systems where an RDBMS is not appropriate.
>
> Consider this for your next project: a relational database is never 
> appropriate.  Work from that.  I'm certain that you will be surprised, 
> in a good way, at what you discover.
Again, you are wrong. Given all the goodness an RDBMS brings you, how 
could you ever say it is not appropriate? You have yet provide one 
documented advantage of an object store that is not provided for by an 
RDBMS, but there are far more advantages to using an RDBMS.

You claimed an object store is better, but an RDBMS can do that just as 
well. You say Ameritrade proves scalability, well 99.999% of the 
projects people will work on will not need that level of scalability and 
would be more than handled by an RDBMS running on a few machines. You 
wouldn't buy an 18 wheeler to commute to work every day. Even so, cache' 
can support SQL, so, there is no reason not to use an RDBMS.







More information about the Discuss mailing list