二、数据库的功能
数据库的基本功能有CRUD(表的创建、插入、更新、删除)等方面,下面我们逐个测试。
Infobright文档指出了它支持的数据类型和取值范围为:
Numeric Types Min Value Max Value
TINYINT -127 127
BOOL, BOOLEAN -127 127
SMALLINT -32767 32767
MEDIUMINT -8388608 8388607
INT -2147483647 2147483647
BIGINT -9223372036854775806 9223372036854775806
FLOAT -3.402823466E+38 3.402823466E+38
DOUBLE (DOUBLE PRECISION) -1.7976931348623157E+308 1.7976931348623157E+308
DEC (M,D) -(1.0E+M - 1)/(1.0E+D) (1.0E+M - 1)/(1.0E+D)
WHERE 0
Date and Time Types Min Value Max Value Format
DATE 100-01-01 9999-12-31 YYYY-mm-dd
DATETIME 100-01-01 00:00:00 9999-12-31 23:59:59 YYYY-mm-dd HH:MM:SS
TIMESTAMP 1970-01-01 00:00:00 2038-01-01 00:59:59 YYYY-mm-dd HH:MM:SS
TIME -838:59:59 838:59:59 HHH:MM:SS
YEAR (4-digit format only) 1901 2155 YYYY
String Types Max Value
CHAR(N) 255
VARCHAR(N) 65532
BINARY(N) 255
VARBINARY(N) 65532
TINYTEXT 255
TEXT(N) 65535
我们可以发现,精确的数值类型DEC最大长度是18位,这实际上存储的是8字节长整型数,通过与小数位数的设定配合表达一个精确的小数,如果需要更大的数据范围,而精度要求可以降低,则可以用DOUBLE数据类型。
下一步是插入数据,企业版数据加载还采用MySQL的load data infile命令。默认的加载程序是MySQL原始的工具,不过你可以通过修改环境变量实现用infobright的加载程序,后者性能更高,参见下一节测试的结果。
对于比较规律的测试数据,可以通过存储过程产生,语法规则和MySQL的一致,由于brighthouse引擎的DML速度比较慢,同样需要设置自动提交开关为关闭,方能取得较好的插入性能。
CREATE PROCEDURE `test`.`insert_1K`
( )
BEGIN
DECLARE v INT;
SET v = 1;
loop_label: LOOP
INSERT INTO t VALUES (mod(v,4),mod(v,5),mod(v,67),mod(case when mod(v,13)>0 then v end ,113),v);
SET v = v + 1;
IF v > 1000 THEN
LEAVE loop_label;
END IF;
END LOOP;
END |
mysql> set autocommit=on;
Query OK, 0 rows affected (0.00 sec)
mysql> call insert_1K_ ();
Query OK, 1 row affected (33.94 sec)
mysql> truncate table t;
Query OK, 0 rows affected (0.00 sec)
mysql> set autocommit=off;
Query OK, 0 rows affected (0.00 sec)
mysql> call insert_1K ();
Query OK, 1 row affected (0.08 sec)
mysql> select count(*) from t;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (0.03 sec)
mysql> commit;
Query OK, 0 rows affected (0.02 sec)
Infobright支持中文,不过需要做一些设置。
Query OK, 0 rows affected (0.00 sec)
mysql> create table thz(a varchar(100))DEFAULT CHARSET=gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> show create table thz;
+-------+--------------------
| thz | CREATE TABLE `thz` (
`a` varchar(100) DEFAULT NULL
) ENGINE=BRIGHTHOUSE DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
mysql> insert into thz values('入门');
Query OK, 1 row affected (0.00 sec)
mysql> insert into thz values('文献');
Query OK, 1 row affected (0.00 sec)
mysql> select * from thz order by 1;
+------+
| a |
+------+
| 入门 |
| 文献 |
+------+
2 rows in set (0.06 sec)
mysql> select * from thz order by 1 desc;
+------+
| a |
+------+
| 文献 |
| 入门 |
+------+
2 rows in set (0.00 sec)