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)
 |