63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
from nose.tools import assert_equal, assert_is_not_none
|
|
from nose_parameterized import parameterized
|
|
|
|
from util import query, commit
|
|
|
|
from time import time
|
|
|
|
USE_SCHEMA = True
|
|
|
|
for q in (
|
|
'DROP TABLE IF EXISTS obs_censustest',
|
|
'''CREATE TABLE obs_censustest (cartodb_id SERIAL PRIMARY KEY,
|
|
the_geom GEOMETRY, name TEXT, measure NUMERIC, category TEXT)''',
|
|
'''INSERT INTO obs_censustest (the_geom, name)
|
|
SELECT * FROM {schema}OBS_GetBoundariesByGeometry(
|
|
st_makeenvelope(-74.05437469482422,40.66319159533881,
|
|
-73.81885528564453,40.745696344339564, 4326),
|
|
'us.census.tiger.block_group_clipped') As m(the_geom, geoid)'''
|
|
):
|
|
query(q.format(
|
|
schema='cdb_observatory.' if USE_SCHEMA else '',
|
|
))
|
|
commit()
|
|
|
|
|
|
ARGS = {
|
|
'OBS_GetMeasureByID': "name, 'us.census.acs.B01001002', '{}'",
|
|
'OBS_GetMeasure': "{}, 'us.census.acs.B01001002'",
|
|
'OBS_GetCategory': "{}, 'us.census.spielman_singleton_segments.X10'",
|
|
}
|
|
|
|
GEOMS = {
|
|
'point': 'ST_PointOnSurface(the_geom)',
|
|
'polygon_match': 'the_geom',
|
|
'polygon_buffered': 'ST_Buffer(the_geom::GEOGRAPHY, 1000)::GEOMETRY(GEOMETRY, 4326)',
|
|
}
|
|
|
|
|
|
@parameterized([
|
|
('OBS_GetMeasureByID', 'us.census.tiger.block_group_clipped'),
|
|
('OBS_GetMeasureByID', 'us.census.tiger.county'),
|
|
('OBS_GetMeasure', GEOMS['point']),
|
|
('OBS_GetMeasure', GEOMS['polygon_match']),
|
|
('OBS_GetMeasure', GEOMS['polygon_buffered']),
|
|
('OBS_GetCategory', GEOMS['point']),
|
|
('OBS_GetCategory', GEOMS['polygon_match']),
|
|
('OBS_GetCategory', GEOMS['polygon_buffered']),
|
|
])
|
|
def test_performance(api_method, arg):
|
|
print api_method, arg
|
|
col = 'measure' if 'measure' in api_method.lower() else 'category'
|
|
for rows in (1, 10, 50, 100):
|
|
q = 'UPDATE obs_censustest SET {col} = {schema}{api_method}({args}) WHERE cartodb_id < {n}'.format(
|
|
col=col,
|
|
schema='cdb_observatory.' if USE_SCHEMA else '',
|
|
api_method=api_method,
|
|
args=ARGS[api_method].format(arg),
|
|
n=rows+1)
|
|
start = time()
|
|
query(q)
|
|
end = time()
|
|
print rows, ': ', (rows / (end - start)), ' QPS'
|