[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [ANN] lua-geoip 0.1.1
- From: Alexander Gladysh <agladysh@...>
- Date: Sat, 26 Mar 2011 04:17:53 +0300
On Fri, Mar 25, 2011 at 22:04, Petite Abeille <petite.abeille@gmail.com> wrote:
> On Mar 25, 2011, at 7:35 PM, Alexander Gladysh wrote:
>> Binary city DB can process about 100K queries/second on my machine,
>> and country DB — about 10K
> Hmmm... are you sure it's not the other way around? For countries, GeoIP.dat is ~1 MB. For cities, GeoLiteCity.dat weights ~30 MB. I would expect countries to be much faster than cities, no?
I would so too. But no. Here is a microbenchmark to prove it (see source below).
lua
-------------------------------------------------------------------
name | rel | abs s / iter = us (1e-6 s) / iter
-------------------------------------------------------------------
city | 1.0000 | 8.71 / 1000000 = 8.710000 us
country | 2.6625 | 23.19 / 1000000 = 23.190000 us
luajit2
-------------------------------------------------------------------
name | rel | abs s / iter = us (1e-6 s) / iter
-------------------------------------------------------------------
city | 1.0000 | 6.48 / 1000000 = 6.480000 us
country | 3.4969 | 22.66 / 1000000 = 22.660000 us
Tests for lua-geoip also include more complete benchmark.
Here are the results from the same machine (luajit2 test/test.lua):
country 49323.207403637 ipnum queries per second
country 48619.92706844 addr queries per second
country 18.74746325292 name queries per second
city 342370.6428249 ipnum queries per second
city 248724.68161516 addr queries per second
city 18.942332824983 name queries per second
Somehow it is not 10x difference as I remembered it, but still, quite noticeable. (Note that name queries seem to be hindered by DNS lookup.)
Maybe it is a bug in my bindings code somewhere...
Alexander.
Microbenchmark source:
require 'geoip.city'
require 'geoip.country'
local IP = "8.8.8.8"
local CITY = assert(
geoip.city.open(
"./GeoLiteCity.dat"
)
)
local COUNTRY = assert(
geoip.country.open(
"./GeoIP.dat"
)
)
local bench = { }
bench.city = function()
assert(CITY:query_by_addr(IP))
end
bench.country = function()
assert(COUNTRY:query_by_addr(IP))
end
return bench