

Nginx directly to mysql. 3 - 4 times as fast as php + libmysql - base
http://nginx.org/pipermail/nginx/2010-June/021075.html

======
CWIZO
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.

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

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

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

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

------
IgorPartola
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?

~~~
piotrSikora
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.

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

------
earle
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.

~~~
regularfry
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.

~~~
earle
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

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

~~~
henrikschroder
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.

~~~
pjscott
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.

~~~
cookiecaper
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++.

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

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

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

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

~~~
jcsalterego
php MCs worldwide yo.

------
Lorin
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.

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

~~~
piotrSikora
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.

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

~~~
piotrSikora
Sure, there is. You should read slides by agentzh:

<http://agentzh.org/misc/slides/nginx-conf-scripting/>

<http://agentzh.org/misc/slides/recent-dev-nginx-conf/>

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

------
cdine
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.

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

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

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

------
xhuang
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.

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

~~~
turtle4
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.

~~~
piotrSikora
Yup, that's exactly the idea here :)

------
executive
can this be used with PHP though?

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

