94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
###################################################################
|
|
# Copyright (c) 2020 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 time
|
|
import random
|
|
import string
|
|
from util.log import *
|
|
from util.cases import *
|
|
from util.sql import *
|
|
from util.sub import *
|
|
|
|
class TDTestCase:
|
|
maxTables = 10000
|
|
maxCols = 50
|
|
rowsPerSecond = 1000
|
|
|
|
def init(self, conn, logSql):
|
|
tdLog.debug("start to execute %s" % __file__)
|
|
tdLog.notice("NOTE: this case does not stop automatically, Ctrl+C to stop")
|
|
tdSql.init(conn.cursor(), logSql)
|
|
self.conn = conn
|
|
|
|
|
|
def generateString(self, length):
|
|
chars = string.ascii_uppercase + string.ascii_lowercase
|
|
v = ""
|
|
for i in range(length):
|
|
v += random.choice(chars)
|
|
return v
|
|
|
|
|
|
def insert(self):
|
|
id = random.randint(0, self.maxTables - 1)
|
|
cola = self.generateString(40)
|
|
sql = "insert into car%d values(now, '%s', %f, %d" % (id, cola, random.random()*100, random.randint(0, 2))
|
|
for i in range(self.maxCols):
|
|
sql += ", %d" % random.randint(0, self.maxTables)
|
|
sql += ")"
|
|
tdSql.execute(sql)
|
|
|
|
|
|
def prepare(self):
|
|
tdLog.info("prepare database: test")
|
|
tdSql.execute('reset query cache')
|
|
tdSql.execute('drop database if exists test')
|
|
tdSql.execute('create database test')
|
|
tdSql.execute('use test')
|
|
|
|
def run(self):
|
|
self.prepare()
|
|
|
|
sql = "create table cars (ts timestamp, a binary(50), b float, c bool"
|
|
for i in range(self.maxCols):
|
|
sql += ", c%d int" % i
|
|
sql += ") tags(id int, category binary(30), brand binary(30));"
|
|
tdSql.execute(sql)
|
|
|
|
for i in range(self.maxTables):
|
|
tdSql.execute("create table car%d using cars tags(%d, 'category%d', 'brand%d')" % (i, i, i % 30, i // 30))
|
|
|
|
time.sleep(0.1)
|
|
|
|
total = 0
|
|
while True:
|
|
start = time.time()
|
|
for i in range(self.rowsPerSecond):
|
|
self.insert()
|
|
total = total + 1
|
|
d = time.time() - start
|
|
tdLog.info("%d rows inserted in %f seconds, total %d" % (self.rowsPerSecond, d, total))
|
|
if d < 1:
|
|
time.sleep(1 - d)
|
|
|
|
|
|
def stop(self):
|
|
tdSql.close()
|
|
tdLog.success("%s successfully executed" % __file__)
|
|
|
|
|
|
tdCases.addWindows(__file__, TDTestCase())
|
|
tdCases.addLinux(__file__, TDTestCase())
|