Hacker News new | past | comments | ask | show | jobs | submit login
Nginx directly to mysql. 3 - 4 times as fast as php + libmysql (nginx.org)
98 points by base on June 21, 2010 | hide | past | favorite | 43 comments



This has maintainability problems written all over it. I can't imagine a web page where you would actually gain something from this, that wouldn't be complex enough that you wouldn't need some language to deal with more complex selects/inserts. And that would mean that you would spread your logic (models?) across two totally different "platforms". One part in nginx conf file (brrr) and the other in your code. Add something like Sphinx into the mix, and you have your SQL all over the place.


In other news, computer scientists discover that evented C code is faster than PHP.


This was promptly followed by 6 hours of pedants complaining that that isn't really computer science, but actually software engineering.


And hours more spent arguing over if software can even be an engineering discipline or not.


Or whether "Computer Science" can actually be a science in the rigorous sense when it has nothing to do with the scientific method.


Why is it only 3-4 times faster is what surprises me. No question that cutting out the PHP interpreter and VM is going to speed things up, but only ever so slightly?


The speed of MySQL is constant in both cases, and IO is always expensive, thus the CPU speedup via C vs PHP is not as dramatic as one hopes; remove MySQL from the equation and you'll see the gigantic difference.


Because it's taken out of the context. Original text says:

"We even observed that ngx_drizzle + ngx_rds_json achieved 128MB/sec (Yes, 1024Mbit/sec!) for a 380KB data-set query while connecting to a simple mysql server, about 3 ~ 4 times as fast as php + libmysql in this setting."

As you can imagine in such scenario (380KB result), MySQL engine is taking the most of the time.


Good point. Every benchmark is only valid in the context in which it was taken.


Why is this a surprise to anyone? And Nginx to memcache will be even faster... and serving static content even faster...

You're adding a tremendous amount of overhead with any high level language stuck in between the connect and the data source.

This is about as basic as it gets, not worthy of #1 item on hacker news.


The idea that you might not need the high-level language in the middle at all is interesting in itself. At least, it is to me. I've not seen it before.


This is working backwards. You do realize that before PHP and higher level languages this is how things generally worked to begin with (server modules) as opposed to now (higher level languages).

I still don't understand why this is on hacker news, let alone the top of the list.. seems to be about the most obvious item of all..

disappointing


Isn't this still how things work if you want to do anything easily with Microsoft's IIS?


If you're also using Microsoft SQL Server, it essentially has this capability (using XML not JSON): http://msdn.microsoft.com/en-US/library/ms188266(v=SQL.90).a...


Yes, you can write an ISAPI module if you want as little as possible between your program and IIS, but I wouldn't label that as "easily".

And I don't see why you would bother, ASP.Net is compiled, it's not exactly a performance hog, unlike PHP.


I haven't used them, but there are a variety of PHP compilers, like phc or Facebook's HipHop. I hear that they can really speed up PHP code.


I can't really tell from the phc page, but HipHop at least doesn't "speed up PHP code". It converts the code from PHP to C++. That isn't speeding up PHP, that's unraveling the PHP and respinning it as C++.


It's still speeding up PHP by compiling it, it's just using C++ as an (extra) intermediate representation.


You haven't seen PHP or Python between MySQL and the webserver? I must be missing your point.


The reverse - I can't remember having seen a database spew JSON from port 80 before without an intervening HLL.


That makes more sense. Thanks for clarifying.


You're kidding me right? I'm off to re-write my entire app as a stored proc ;)

You are right of course. But what would be nice would be to replace part of a static page with the result of a piece of SQL. To combine ESIs with MySql so that you can serve static files and still be able to add things like watermarks using a MySql lookup based on a session cookie.


I'd like to see a benchmark against PHP + mysqlnd (native mysql driver for PHP, which supersedes libmysql as of PHP 5.3)


Ditto, plus another round using facebook's hip hop php compiler.


Does anyone actually use that thing? Except Facebook of course.


php MCs worldwide yo.


This keeps reminding me to get off my butt and make some sort of passthrough between nginx and mongodb. Yes, I know there's GridFS development but it doesn't suit my needs.


The title of this post is a bit misleading. It's agentzh (who rocks) announcing two new plugins which have plenty of use-cases.


Yes, title is definitely misleading. He's not even announcing new modules (both are available for about half year now), he just announced massive performance boost in them.


This is really interesting, but I wonder if there is any support for user authentication? Perhaps by combining with basic auth?



This should really speed up my website's autocompletion. Not having to load the rails stack will be a big performance boost.


So, I get it and all that, what are some real world use cases of this and the postgresql equivalent? Who's actually using these things for something other than saying how fast they are?

I just hope they aren't being used as public-facing JSON API endpoints and the such, since none of them seem to even consider the case of SQL injection. From a quick glance it doesn't seem that any type of parameterized query or prepared statements are available to even begin helping with that, and the "documentation" examples wouldn't be setting people off on the right foot by even limiting the location paths with strict regex's.


> Who's actually using these things for something other than saying how fast they are?

Taobao.com (14th biggest site in the world, 3rd in China - according to Alexa) is using ngx_drizzle + ngx_rds_json in production. Qunar.com is using ngx_postgres + ngx_rds_json.


The example seems to use both regex and set_quote_sql_str to prevent sql injection.


Interesting, thanks for the pre-coffee clarification. aka I can't read =]

I'm sure people will still mess things up :)


removing high level language in the middle is good, if you need performance, why not just use redis to server json directly, in the case you need scale up your db why not use crunchDB.


What is the code in this app written in, I don't really follow?


You specify a route in the nginx config, and when the route is requested, it serves up the result of the sql query that you specified. Even further, it looks like it will run different queries, depending on the type of request made (GET, PUT, DELETE).

This just makes it a little easier to put together a RESTful app. Alot of those apps are just thin wrappers around the request that check the request type, check authentication, and then perform a simple db statement. This is easier to define, and apparently alot faster.


Yup, that's exactly the idea here :)


It seems as though you write the SQL in the nginx conf... Not sure if it's then somehow available elsewhere.


can this be used with PHP though?


the entire point is to remove php/perl/ruby etc from the equation.




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: