185 lines
7.5 KiB
Python
Executable File
185 lines
7.5 KiB
Python
Executable File
###################################################################
|
|
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# This file is proprietary and confidential to TAOS Technologies.
|
|
# No part of this file may be reproduced, stored, transmitted,
|
|
# disclosed or used in any form or by any means other than as
|
|
# expressly provided by the written permission from Jianhui Tao
|
|
#
|
|
###################################################################
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import sys
|
|
import taos
|
|
import threading
|
|
import time
|
|
from datetime import datetime
|
|
|
|
|
|
class MetadataQuery:
|
|
def initConnection(self):
|
|
self.tables = 100000
|
|
self.records = 10
|
|
self.numOfTherads = 20
|
|
self.ts = 1537146000000
|
|
self.host = "127.0.0.1"
|
|
self.user = "root"
|
|
self.password = "taosdata"
|
|
self.config = "/etc/taos"
|
|
|
|
def connectDB(self):
|
|
self.conn = taos.connect(
|
|
self.host,
|
|
self.user,
|
|
self.password,
|
|
self.config)
|
|
return self.conn.cursor()
|
|
|
|
def createStable(self):
|
|
print("================= Create stable meters =================")
|
|
cursor = self.connectDB()
|
|
cursor.execute("drop database if exists test")
|
|
cursor.execute("create database test")
|
|
cursor.execute("use test")
|
|
cursor.execute('''create table if not exists meters (ts timestamp, speed int) tags(
|
|
tgcol1 tinyint, tgcol2 smallint, tgcol3 int, tgcol4 bigint, tgcol5 float, tgcol6 double, tgcol7 bool, tgcol8 binary(20), tgcol9 nchar(20),
|
|
tgcol10 tinyint, tgcol11 smallint, tgcol12 int, tgcol13 bigint, tgcol14 float, tgcol15 double, tgcol16 bool, tgcol17 binary(20), tgcol18 nchar(20),
|
|
tgcol19 tinyint, tgcol20 smallint, tgcol21 int, tgcol22 bigint, tgcol23 float, tgcol24 double, tgcol25 bool, tgcol26 binary(20), tgcol27 nchar(20),
|
|
tgcol28 tinyint, tgcol29 smallint, tgcol30 int, tgcol31 bigint, tgcol32 float, tgcol33 double, tgcol34 bool, tgcol35 binary(20), tgcol36 nchar(20),
|
|
tgcol37 tinyint, tgcol38 smallint, tgcol39 int, tgcol40 bigint, tgcol41 float, tgcol42 double, tgcol43 bool, tgcol44 binary(20), tgcol45 nchar(20),
|
|
tgcol46 tinyint, tgcol47 smallint, tgcol48 int, tgcol49 bigint, tgcol50 float, tgcol51 double, tgcol52 bool, tgcol53 binary(20), tgcol54 nchar(20))''')
|
|
cursor.close()
|
|
self.conn.close()
|
|
|
|
def createTablesAndInsertData(self, threadID):
|
|
cursor = self.connectDB()
|
|
cursor.execute("use test")
|
|
|
|
tablesPerThread = int(self.tables / self.numOfTherads)
|
|
base = threadID * tablesPerThread
|
|
for i in range(tablesPerThread):
|
|
cursor.execute(
|
|
'''create table t%d using meters tags(
|
|
%d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d',
|
|
%d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d',
|
|
%d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d',
|
|
%d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d',
|
|
%d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d',
|
|
%d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d')''' %
|
|
(base + i + 1, (base + i) %
|
|
100, (base + i) %
|
|
10000, (base + i) %
|
|
1000000, (base + i) %
|
|
100000000, (base + i) %
|
|
100 * 1.1, (base + i) %
|
|
100 * 2.3, (base + i) %
|
|
2, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
10000, (base + i) %
|
|
1000000, (base + i) %
|
|
100000000, (base + i) %
|
|
100 * 1.1, (base + i) %
|
|
100 * 2.3, (base + i) %
|
|
2, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
10000, (base + i) %
|
|
1000000, (base + i) %
|
|
100000000, (base + i) %
|
|
100 * 1.1, (base + i) %
|
|
100 * 2.3, (base + i) %
|
|
2, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
10000, (base + i) %
|
|
1000000, (base + i) %
|
|
100000000, (base + i) %
|
|
100 * 1.1, (base + i) %
|
|
100 * 2.3, (base + i) %
|
|
2, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
10000, (base + i) %
|
|
1000000, (base + i) %
|
|
100000000, (base + i) %
|
|
100 * 1.1, (base + i) %
|
|
100 * 2.3, (base + i) %
|
|
2, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
100, (base + i) %
|
|
10000, (base + i) %
|
|
1000000, (base + i) %
|
|
100000000, (base + i) %
|
|
100 * 1.1, (base + i) %
|
|
100 * 2.3, (base + i) %
|
|
2, (base + i) %
|
|
100, (base + i) %
|
|
100))
|
|
|
|
cursor.execute(
|
|
"insert into t%d values(%d, 1) (%d, 2) (%d, 3) (%d, 4) (%d, 5)" %
|
|
(base + i + 1, self.ts + 1, self.ts + 2, self.ts + 3, self.ts + 4, self.ts + 5))
|
|
cursor.close()
|
|
|
|
def queryData(self, query):
|
|
cursor = self.connectDB()
|
|
cursor.execute("use test")
|
|
|
|
print("================= query tag data =================")
|
|
startTime = datetime.now()
|
|
cursor.execute(query)
|
|
cursor.fetchall()
|
|
endTime = datetime.now()
|
|
print(
|
|
"Query time for the above query is %d seconds" %
|
|
(endTime - startTime).seconds)
|
|
|
|
cursor.close()
|
|
self.conn.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
t = MetadataQuery()
|
|
t.initConnection()
|
|
t.createStable()
|
|
|
|
print(
|
|
"================= Create %d tables and insert %d records into each table =================" %
|
|
(t.tables, t.records))
|
|
startTime = datetime.now()
|
|
threads = []
|
|
for i in range(t.numOfTherads):
|
|
thread = threading.Thread(
|
|
target=t.createTablesAndInsertData, args=(i,))
|
|
thread.start()
|
|
threads.append(thread)
|
|
|
|
for th in threads:
|
|
th.join()
|
|
|
|
endTime = datetime.now()
|
|
diff = (endTime - startTime).seconds
|
|
print(
|
|
"spend %d seconds to create %d tables and insert %d records into each table" %
|
|
(diff, t.tables, t.records))
|
|
|
|
query = '''select tgcol1, tgcol2, tgcol3, tgcol4, tgcol5, tgcol6, tgcol7, tgcol8, tgcol9,
|
|
tgcol10, tgcol11, tgcol12, tgcol13, tgcol14, tgcol15, tgcol16, tgcol17, tgcol18,
|
|
tgcol19, tgcol20, tgcol21, tgcol22, tgcol23, tgcol24, tgcol25, tgcol26, tgcol27,
|
|
tgcol28, tgcol29, tgcol30, tgcol31, tgcol32, tgcol33, tgcol34, tgcol35, tgcol36,
|
|
tgcol37, tgcol38, tgcol39, tgcol40, tgcol41, tgcol42, tgcol43, tgcol44, tgcol45,
|
|
tgcol46, tgcol47, tgcol48, tgcol49, tgcol50, tgcol51, tgcol52, tgcol53, tgcol54
|
|
from meters where tgcol1 > 10 AND tgcol1 < 100 and tgcol2 > 100 and tgcol2 < 1000 or tgcol3 > 10000 or tgcol7 = true
|
|
or tgcol8 like '%2' and tgcol10 < 10'''
|
|
|
|
t.queryData(query)
|