94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
import logging
|
|
import os.path
|
|
import sys
|
|
import time
|
|
dirname = os.path.dirname(os.path.abspath(__file__))
|
|
sys.path.append(dirname)
|
|
sys.path.append(os.path.join(dirname, '..'))
|
|
|
|
from cassandra.cluster import Cluster
|
|
from cassandra.io.asyncorereactor import AsyncoreConnection
|
|
from cassandra.query import SimpleStatement
|
|
|
|
log = logging.getLogger()
|
|
log.setLevel('INFO')
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s"))
|
|
log.addHandler(handler)
|
|
|
|
supported_reactors = [AsyncoreConnection]
|
|
try:
|
|
from cassandra.io.libevreactor import LibevConnection
|
|
supported_reactors.append(LibevConnection)
|
|
except ImportError, exc:
|
|
log.warning("Not benchmarking libev reactor: %s" % (exc,))
|
|
|
|
KEYSPACE = "testkeyspace"
|
|
TABLE = "testtable"
|
|
NUM_QUERIES = 10000
|
|
|
|
def setup():
|
|
|
|
cluster = Cluster(['127.0.0.1'])
|
|
session = cluster.connect()
|
|
|
|
rows = session.execute("SELECT keyspace_name FROM system.schema_keyspaces")
|
|
if KEYSPACE in [row[0] for row in rows]:
|
|
log.debug("dropping existing keyspace...")
|
|
session.execute("DROP KEYSPACE " + KEYSPACE)
|
|
|
|
log.debug("Creating keyspace...")
|
|
session.execute("""
|
|
CREATE KEYSPACE %s
|
|
WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '2' }
|
|
""" % KEYSPACE)
|
|
|
|
log.debug("Setting keyspace...")
|
|
session.set_keyspace(KEYSPACE)
|
|
|
|
log.debug("Creating table...")
|
|
session.execute("""
|
|
CREATE TABLE %s (
|
|
thekey text,
|
|
col1 text,
|
|
col2 text,
|
|
PRIMARY KEY (thekey, col1)
|
|
)
|
|
""" % TABLE)
|
|
|
|
def teardown():
|
|
cluster = Cluster(['127.0.0.1'])
|
|
session = cluster.connect()
|
|
session.execute("DROP KEYSPACE " + KEYSPACE)
|
|
|
|
|
|
def benchmark(run_fn):
|
|
for conn_class in supported_reactors:
|
|
setup()
|
|
log.info("==== %s ====" % (conn_class.__name__,))
|
|
|
|
cluster = Cluster(['127.0.0.1'])
|
|
cluster.connection_class = conn_class
|
|
session = cluster.connect(KEYSPACE)
|
|
|
|
log.debug("Sleeping for two seconds...")
|
|
time.sleep(2.0)
|
|
|
|
query = SimpleStatement("""
|
|
INSERT INTO {table} (thekey, col1, col2)
|
|
VALUES (%(key)s, %(a)s, %(b)s)
|
|
""".format(table=TABLE))
|
|
values = {'key': 'key', 'a': 'a', 'b': 'b'}
|
|
|
|
log.debug("Beginning inserts...")
|
|
start = time.time()
|
|
try:
|
|
run_fn(session, query, values, NUM_QUERIES)
|
|
end = time.time()
|
|
finally:
|
|
teardown()
|
|
|
|
total = end - start
|
|
log.info("Total time: %0.2fs" % total)
|
|
log.info("Average throughput: %0.2f/sec" % (NUM_QUERIES / total))
|