In [3]:
import datetime
import redis

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

from contextlib import contextmanager
import time

In [4]:
%matplotlib inline
%load_ext autoreload
%autoreload 2


The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

In [5]:
BENCHMARK = []

@contextmanager
def benchthis(label):
    global BENCHMARK
    start = time.time()
    try:
        yield
    finally:
        end = time.time()
        BENCHMARK.append(end-start)
        #print ('{}: {:.4f}s'.format(label, end-start))

@contextmanager
def just_time_it(label):
    start = time.time()
    try:
        yield
    finally:
        end = time.time()
        print ('{}: {:.4f}s'.format(label, end-start))

In [6]:
import tsdb
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
conn = redis.Redis(connection_pool=pool)
conn.flushdb()


Out[6]:
True

In [7]:
def write_and_read(conn, ts, series, repeat=10):
    start = datetime.datetime.fromtimestamp(series.index[0].timestamp())-series.index[0].utcoffset()
    end = datetime.datetime.fromtimestamp(series.index[-1].timestamp())-series.index[-1].utcoffset()
    #print (start, end)
    with benchthis('write data: {}'.format(len(series))):
        for i in range(repeat):
            tsdb.write_data(conn, ts.pk, series)
    with benchthis('read data: {}'.format(len(series))):
        for i in range(repeat):
            read_series = tsdb.read_data(conn, ts.pk, start, end)
    #print (len(series), len(read_series), end=': ')
    #print (all(series == read_series))

def make_series(N=8760):
    index = pd.date_range(
        start='1/1/2015',
        periods=N,
        freq='1H',
        tz='CET'
    )
    return pd.Series(np.arange(1, N+1), index)

In [8]:
ts1 = tsdb.ts_struct(-1, 'benchmark', '1H', 'CET')
ts_id = tsdb.create_new_ts(conn, ts1)
ts = tsdb.read_ts(conn, ts_id)
ts

repeat = 15
bench_list = list(range(4380, 8760*20, 4380))
BENCHMARK = []
for size in bench_list:
    #print (size, end=': ')
    s = make_series(size)
    write_and_read(conn, ts, s, repeat=repeat)

In [9]:
print (len(BENCHMARK), len(bench_list))
with plt.xkcd():
    s_read = pd.Series(np.array(BENCHMARK[1::2])/repeat, bench_list)
    s_write = pd.Series(np.array(BENCHMARK[::2])/repeat, bench_list)
    sns.set(font_scale=2)
    sns.plt.figure(figsize=(16, 8))
    sns.plt.title('Performance of read_d and write')
    s_write.plot(kind='bar', label='writes', alpha=0.5, color='green')
    s_read.plot(kind='bar', label='reads')#, alpha=0.5)
    sns.plt.ylabel('time in s')
    sns.plt.xlabel('number of timeseries values')
    sns.plt.legend(loc='best')


78 39

In [ ]: