TDengine与OpenTSDB对比测试

摘要:为帮助用户了解TDengine的指标,此次测试,从数据库的读、写、查询、压缩比等方面对TDengine和OpenTSDB进行了对比测试。从测试结果上看,TDengine的性能远超OpenTSDB,写入性能约为25倍,读取性能约为32倍,聚合函数性能约为1000倍,按标签分组查询性能约为1000倍,按时间分组查询性能约为40倍,压缩比约为5倍。

测试环境

对比测试的测试程序和数据库服务在同一台4核8GB的Dell台式机上部署,台式机型号为OptiPlex-3050,详细配置如下

  1. OS: Ubuntu 16.04 x64
  2. CPU: Intel(R) Core(TM) i3-7100 CPU @ 3.90GHz
  3. Memory: 8GB
  4. Disk: 1TB HDD

测试数据集及其生成方法

本次测试调研了两类比较热门的测试数据集:

  • 1.纽约出租车运行数据,因该数据中抹去了单台车辆的信息,无法对其进行建模
  • 2.faker生成工具,因其只能生成字符串,并不适合物联网场景下处理的数据。

所以,为了使得测试可轻易重复,自己写了一个生成模拟数据的程序来进行本次测试。

测试数据生成程序模拟若干温湿度计生成的数据,其中温度为整数、湿度为浮点数,同时每个温度计包含设备ID、设备分组、设备名称三个标签。为了尽可能真实地模拟温湿度计的生成数据,没有使用完全随机数,而是针对每个温度计确保生成的数据值呈正态分布。

测试数据的频率为1秒钟,数据集包含10000台设备,每台设备10000条记录。每条数据采集记录包含3个标签字段,2个数据字段,1个时间戳字段。

2.测试数据生成程序源码

采用java程序生成测试数据集,测试程序源代码行数较多,因此您可以到https://github.com/taosdata/TDengine/tree/master/tests/comparisonTest/dataGenerator 下载,执行如下语句

  1. cd tests/comparisonTest/dataGenerator
  2. javac com/taosdata/generator/DataGenerator.java

3.测试数据生成程序用法

相关参数如下

  • dataDir 生成的数据文件路径
  • numOfFiles 生成的数据文件数目
  • numOfDevices 测试数据集中的设备数目
  • rowsPerDevice 测试数据集中每台设备包含的记录条数

4.生成测试数据

执行如下命令,会在~/testdata目录下生成100个数据文件,每个文件包含100台设备的测试数据;合计10000台设备,每台设备10000条记录

  1. mkdir ~/testdata
  2. java com/taosdata/generator/DataGenerator -dataDir ~/testdata -numOfDevices 10000 -numOfFiles 100 -rowsPerDevice 10000

TDengine环境准备

TDengine是一个开源的专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。除核心的快10倍以上的时序数据库功能外,还提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的工作量。

1.安装部署

  • 下载tdengine-1.6.1.0.tar.gz,地址https://www.taosdata.com/
  • 安装TDengine,解压后运行install.sh进行安装
  • 启动TDengine,运行sudo systemctl start taosd
  • 测试是否安装成功,运行TDengine的shell命令行程序taos,可以看到如下类似信息
  1. Welcome to the TDengine shell, server version:1.6.1.0 client version:1.6.1.0
  2. Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.
  3. taos>

2.数据建模

TDengine为相同结构的设备创建一张超级表,而每个具体的设备则单独创建一张数据表。因此,超级表的数据字段为采集时间、温度、湿度等与时间序列相关的采集数据;标签字段为设备编号、设备分组编号、设备名称等设备本身固定的描述信息。

创建超级表的SQL语句为

  1. create table devices(ts timestamp, temperature int, humidity float) tags(devid int, devname binary(16), devgroup int);

以设备ID作为表名(例如device id为1,则表名为dev1),使用自动建表语句,写入一条记录的语句为

  1. insert into dev1 using devices tags(1,'d1',0) values(1545038786000,1,3.560000);

3.测试程序源码

本文采用TDengine的原生C语言接口,编写数据写入及查询程序,后续的其他文章会提供基于JDBCDriver的测试程序。
测试程序源代码行数较多,因此您可以到https://github.com/taosdata/TDengine/tree/master/tests/comparisonTest/tdengine 下载,执行如下语句

  1. cd tdengine
  2. make

会在当前目录下生成可执行文件./tdengineTest

4.测试程序用法

TDengine的测试程序用法与OpenTSDB的用法相同,写入相关参数

  • writeClients 并发写入的客户端链接数目,默认为1
  • rowsPerRequest 一次请求中的记录条数,默认为100,范围1-1000
  • dataDir 读取的数据文件路径,来自于测试数据生成程序
  • numOfFiles 从数据文件路径中读取的文件个数

例如

  1. ./tdengineTest -dataDir ./data -numOfFiles 10 -writeClients 2 -rowsPerRequest 100

查询相关参数

  • sql 将要执行的SQL语句列表所在的文件路径,以逗号区分每个SQL语句

例如

  1. ./tdengineTest -sql ./sqlCmd.txt

OpenTSDB环境准备

OpenTSDB是基于Hbase的分布式的,可扩展的时间序列数据库。

1.安装部署

  • 下载安装并启动HBase

从https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/ 下载 hbase-1.4.10-bin.tar.gz

  1. tar xzvf hbase-1.4.10-bin.tar.gz
  2. cd hbase-1.4.10/bin
  3. ./start_hbase.sh
  • 下载并安装OpenTSDB
  1. git clone git://github.com/OpenTSDB/opentsdb.git
  2. cd opentsdb
  3. ./build.sh
  • 在HBase里建表

如果是第一次运行OpenTSDB,还需要先创建一些必要的HBase表。

  1. env COMPRESSION=NONE HBASE_HOME=${HBASE_HOME}/hbase-version ${OpenTSDB_download_path}/src/create_table.sh
  • 启动OpenTSDB服务
  1. sudo service opentsdb start

OpenTSDB可以通过http://hostIp:4242打开交互式网页

图0 OpenTSDB交互式网页

  • 修改设置

打开OpenTSDB配置文件

  1. cd /etc/opentsdb
  2. vim opentsdb.conf

修改某些参数的默认值

  1. tsd.core.auto_create_metrics = true
  2. tsd.http.request.enable_chunked = true
  3. tsd.http.request.max_chunk = 30000

因为本次测试采用http 接口,如果出现“java.net.NoRouteToHostException: Cannot assign requested address (Address not available)” 这种错误,还可执行如下命令

  1. sudo sysctl -w net.ipv4.tcp_tw_reuse=1

2.OpenTSDB数据建模

创建一个名为devices的measurement,所有设备都属于该measurement,不同设备通过标签进行区分。每台设备包含三个标签,分别为设备编号、设备分组编号、设备名称。每条记录只能包含一个metric,因此需要对温度(整型)和 湿度(浮点)分别写入一条记录。每条记录包含设备的三个标签,一个metric的名字和值,以及时间戳。

3.OpenTSDB测试程序源码

本文采用OpenTSDB的原生语言java,编写数据写入及查询程序。因为OpenTSDB并未提供官方java 接口,本次测试选择调用他们的http接口。测试程序源代码行数较多,因此您可以到https://github.com/taosdata/TDengine/tree/master/tests/comparisonTest/opentsdb 下载。

4.OpenTSDB测试程序用法

写入相关参数

  • writeClients 并发写入的客户端链接数目,默认为1
  • rowsPerRequest 一次请求中的记录条数,默认为100,范围1-1000
  • dataDir 读取的数据文件路径,来自于测试数据生成程序
  • numOfFiles 从数据文件路径中读取的文件个数

例如

  1. cd opentsdb/opentsdbtest/src/target
  2. java -jar opentsdbtest-1.0-SNAPSHOT-jar-with-dependencies.jar -dataDir ~/testdata -numOfFiles 100 -writeClients 2 -rowsPerRequest 30

查询相关参数

  • sql 将要执行的SQL语句选项
  1. java -jar opentsdbtest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql sqlchoice

写入性能对比

数据库的一个写入请求可以包含一条或多条记录,一次请求里包含的记录条数越多,写入性能就会相应提升。在以下测试中,使用R/R表示Records/Request ,即一次请求中的记录条数。同时,一个数据库可以支持多个客户端链接,链接数增加,系统总的写入通吐量也会相应增加。因此测试中,对于每一个数据库,都会测试一个客户端和多个客户端连接的情况。

1.TDengine的写入性能

TDengine按照每次请求包含1,100,500,1000,2000条记录各进行测试,同时也测试了不同客户端连接数的情况。测试步骤如下所示,您可以修改示例中的参数,完成多次不同的测试。

  1. 1.清空上次测试数据
  2. 运行TDengine的shell命令行程序taos,执行删除测试数据库语句
  3. Welcome to the TDengine shell, server version:1.6.1.0 client version:1.6.1.0
  4. Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.
  5. taos>drop database db;
  6. 2.测试执行
  7. 开启5个客户端读取~/testdata目录中的100个数据文件,每个请求写入1000条数据,可以参考如下命令
  8. ./tdengineTest -dataDir ~/testdata -numOfFiles 100 -writeClients 5 -rowsPerRequest 1000

写入吞吐量如下,单位为记录数/秒

R/R 1 client 2 clients 3 clients 4 clients 5 clients 6 clients 7 clients
1 26824 43699 55137 62869 64529 68647 72277
100 415800 734484 895522 976085 1087902 1171074 1192199
500 479846 882612 1083032 1195100 1269196 1364256 1417004
1000 500751 914494 1121914 1239157 1367989 1418104 1476560
2000 512820 1055520 1174164 1306904 1426635 1458434 1477208

表1 TDengine的写入吞吐量

图1 TDengine的写入吞吐量

2.OpenTSDB的写入性能

OpenTSDB按照每次请求包含1,10,30,50,80条记录各进行测试,同时也测试了不同客户端连接数的情况。测试步骤如下所示,您可以修改示例中的参数,完成多次不同的测试。

  1. 1.清空上次测试数据
  2. 运行HBase的shell命令行程序./hbase shell,可以看到如下类似信息
  3. HBase Shell
  4. Use "help" to get list of supported commands.
  5. Use "exit" to quit this interactive shell.
  6. Version 1.4.10, r76ab087819fe82ccf6f531096e18ad1bed079651, Wed Jun 5 16:48:11 PDT 2019
  7. hbase(main):001:0> disable 'tsdb'; disable 'tsdb-meta'; disable 'tsdb-tree'; disable 'tsdb-uid';
  8. hbase(main):002:0> drop 'tsdb'; drop 'tsdb-meta'; drop 'tsdb-tree'; drop 'tsdb-uid';
  9. hbase(main):003:0> quit
  10. 然后再为OpenTSDB建表
  11. env COMPRESSION=NONE HBASE_HOME=${HBASE_HOME}/hbase-version ${OpenTSDB_download_path}/src/create_table.sh

2.测试执行

开启5个客户端读取~/testdata目录中的100个数据文件,每个请求写入30条数据,可以参考如下命令

  1. java -jar opentsdbtest-1.0-SNAPSHOT-jar-with-dependencies.jar -dataDir ~/testdata -numOfFiles 100 -writeClients 5 -rowsPerRequest 30

写入吞吐量如下,单位为记录数/秒

R/R 1 client 2 clients 3 clients 4 clients 5 clients 6 clients 7 clients
1 2370 2474 2572 2710 2497 2436 2371
10 18393 22828 22656 22924 22507 23200 23099
30 37463 45649 45735 46342 46795 46675 44908
50 45255 53222 50503 54475 54543 54283 54970
80 48794 56386 54564 56999 57198 57318 57272

表2 OpenTSDB的写入吞吐量

图2 OpenTSDB的写入吞吐量

3.TDengin和OpenTSDB的最佳性能对比

基于以上的测试数据,将TDengine和OpenTSDB测试出的最佳写入速度进行对比,结果如下

R/R 1 client 2 clients 3 clients 4 clients 5 clients 6 clients 7 clients
TDengine 512820 1055520 1174164 1306904 1426635 1458434 1477208
OpenTSDB 48794 56386 54564 56999 57198 57318 57272

表3 TDengine和OpenTSDB的最佳写入性能对比

图3 TDengine和OpenTSDB的最佳写入性能对比

从图3可以看出,TDengine的写入速度约为百万条记录/秒的量级,而OpenTSDB的写入速度约为六万条记录/秒的量级。因此可以得出结论,在同等数据集和硬件环境下,TDengine的写入速度远高于OpenTSDB,约为25倍。

读取性能对比

本测试做了简单的遍历查询,就是将写入的数据全部读出。每次查询仅取出100万条记录,在测试数据准备时,已经按照devgroup字段将数据拆分成100个分组,本次测试随机选取其中10个分组进行查询。

1. TDengine的测试方法

  1. 测试SQL语句存储在tdengine/q1.txt中,测试SQL语句参考
  2. select * from db.devices where devgroup=0;
  3. 执行方法如下
  4. ./tdengineTest -sql ./q1.txt

2.OpenTSDB的测试方法

OpenTSDB的查询语句为json语句,已写在代码里,测试时只需选择执行哪项查询即可。

  1. 测试SQL的选项(sqlchoice)为q1
  2. 执行方法如下
  3. java -jar opentsdbtest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql q1

读取速度如下,单位为秒

Latency G-0 G-10 G-20 G-30 G-40 G-50 G-60 G-70 G-80 G-90
TDengine 0.235 0.212 0.208 0.218 0.209 0.210 0.209 0.209 0.216 0.208
OpenTSDB 6.69 5.92 6.58 6.65 7.29 7.51 5.98 6.20 7.03 6.57

表4 TDengine和OpenTSDB的读取性能对比

从图表中可以看出,TDengine的100万条的读取速度稳定在0.21秒,吞吐量约为500万条记录/秒,OpenTSDB的100万条的读取速度稳定在6.7秒,吞吐量约为15万条记录/秒。所以从测试结果来看,TDengine的查询吞吐量远高于OpenTSDB, 约为OpenTSDB的16倍。

聚合函数性能对比

本单元的测试包含COUNT,AVERAGE,SUM,MAX,MIN,SPREAD这六个TDEngine和OpenTSDB共有的聚合函数。所有测试函数都会搭配筛选条件(WHERE)来选取设备的十分之一、十分之二、十分之三、直到全部设备。

1.TDengine的聚合函数性能

测试SQL语句存储在tdengine/q2.txt中,测试SQL语句参考

  1. select count(*) from db.devices where devgroup<10;

执行方法如下

  1. ./tdengineTest -sql ./q2.txt

查询速度如下表,单位为秒

Latency 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
count 0.018 0.026 0.016 0.018 0.017 0.024 0.024 0.027 0.030 0.033
avg 0.007 0.014 0.015 0.020 0.024 0.038 0.044 0.050 0.057 0.060
sum 0.006 0.010 0.019 0.018 0.031 0.036 0.034 0.037 0.043 0.046
max 0.007 0.013 0.015 0.020 0.025 0.030 0.035 0.039 0.045 0.049
min 0.006 0.010 0.016 0.024 0.032 0.039 0.045 0.041 0.043 0.049

表5 TDengine聚合函数性能

图5 TDengine聚合函数性能

2.OpenTSDB的聚合函数性能

OpenTSDB的查询语句为json语句,已写在代码里,测试时只需选择执行哪项查询即可。

测试SQL的选项(sqlchoice)为q2

执行方法如下

  1. java -jar opentsdbtest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql q2

查询速度如下表,单位为秒

Latency 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
count 67.82 67.3 66.87 67.17 66.67 67.23 67.17 66.88 67.1 66.72
mean 66.62 67.3 67.21 67.1 67.07 66.76 67.31 67.00 66.52 66.99
sum 67.12 66.79 67.68 66.90 67.41 66.59 66.95 67.1 66.74 66.59
max 66.55 67.13 66.93 67.12 66.96 67.15 66.91 66.73 67.1 67.29
min 66.82 67.03 66.66 66.5 66.82 66.64 67.36 67.04 66.51 66.67

表6 OpenTSDB聚合函数性能

图6 OpenTSDB聚合函数性能

3.聚合函数性能对比

基于以上的测试数据,将TDengine和OpenTSDB在1亿条记录数据集的测试结果进行对比

>

Latency count average sum max min
TDengine 0.033 0.06 0.046 0.049 0.049
OpenTSDB 66.72 66.99 66.59 67.29 66.67

表7 聚合函数性能对比

图7 聚合函数性能对比

从图7可以看出,TDengine的聚合函数查询时间在100毫秒以内,而OpenTSDB的查询时间在66秒左右。因此可以得出结论,在同等数据集和硬件环境下,TDengine的聚合速度远远高于OpenTSDB,超过1000倍。

按标签分组查询性能对比

本测试做了按标签分组函数的性能测试,测试函数会搭配筛选条件(WHERE)来选取设备的十分之一、十分之二、十分之三、直到全部设备。

1. TDengine的测试方法

测试SQL语句存储在tdengine/q3.txt中,例如

  1. select count(temperature), sum(temperature), avg(temperature) from db.devices where devgroup<10 group by devgroup;

执行方法如下

  1. ./tdengineTest -sql ./q3.txt

2. OpenTSDB的测试方法

测试SQL的选项(sqlchoice)为q3

执行方法如下

  1. java -jar opentsdbtest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql q3

读取速度如下,单位为秒

Latency 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
TDengine 0.030 0.028 0.031 0.041 0.069 0.066 0.077 0.091 0.102 0.123
OpenTSDB 125.91 127.39 126.79 126.42 125.73 126.85 127.77 126.99 127.16 126.41

表8 TDengine和OpenTSDB的按标签分组查询性能对比

图8 TDengine和OpenTSDB的按标签分组查询性能对比

从测试结果来看,TDengine的分组聚合查询速度远高于OpenTSDB,约为1000倍。

按时间分组性能对比

本测试做了按时间分组函数的性能测试,测试函数会搭配筛选条件(WHERE)来选取设备的十分之一、十分之二、十分之三、直到全部设备。

1. TDengine的测试方法

测试SQL语句存储在tdengine/q4.txt中,例如

  1. select count(temperature), sum(temperature), avg(temperature) from db.devices where devgroup<10 interval(1m);

执行方法如下

  1. ./tdengineTest -sql ./q4.txt

2. OpenTSDB的测试方法

测试SQL的选项(sqlchoice)为q4

执行方法如下

  1. java -jar opentsdbtest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql q4

读取速度如下,单位为秒

Latency 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
TDengine 0.237 0.472 0.653 0.902 1.134 1.422 1.753 1.784 2.085 2.549
OpenTSDB 82.53 83.04 83.93 82.74 82.96 82.75 82.14 82.37 83.29 82.46

表9 TDengine和OpenTSDB的按时间分组查询性能对比

图9 TDengine和OpenTSDB的按时间分组查询性能对比

从测试结果来看,TDengine的按时间分组聚合查询速度远高于OpenTSDB,约为40倍。

压缩比对比

1.原始数据的磁盘占用

本次测试共生成100个测试数据文件,存储在~/testdata目录下,使用du命令查看~/testdata目录的文件大小

  1. cd ~/testdata
  2. du -h .

如下图所示

图10 原始数据的磁盘占用情况

2.查看TDengine的磁盘占用

TDengine的磁盘文件默认位置在目录/var/lib/taos/data下,在查看磁盘文件大小时,首先将TDengine的服务停止

  1. sudo systemctl stop taosd

然后,调用du命令,查看/var/lib/taos/data目录下文件的大小

  1. cd /var/lib/taos/data
  2. du -h .

如下图所示

图11 TDengine的磁盘占用情况

3.查看OpenTSDB的磁盘占用

OpenTSDB的磁盘文件默认位置在目录/var/lib/hbase/data/下,在查看磁盘文件大小时,首先将OpenTSDB的服务停止

  1. sudo service opentsdb stop

调用du命令,查看该目录下文件的大小。

  1. cd /var/lib/hbase/data/
  2. du -sh

如下图所示

图12 OpenTSDB的磁盘占用情况

4.磁盘占用情况对比

生成的测试数据文件占用的磁盘大小为3941MB,OpenTSDB磁盘占用2.3GB,TDengine磁盘占用459MB。在相对比较随机数据集的情况下,TDengine的压缩比约为OpenTSDB压缩比的5倍。

在物联网场景下,大多数采集数据的变化范围都比较小。由于TDengine采用列式存储,因此可以预期,TDengine在真实场景的压缩比表现会更好。

功能对比

TDengine与OpenTSDB都是用与处理时序数据的存储引擎,其功能比较接近,各有特色。

功能支持 TDengine OpenTSDB
SQL语法支持 支持 不支持
私有化部署支持 支持 支持
水平扩展能力 支持 支持
系统连接管理 支持 支持
查询任务管理 支持 支持
数据导入工具 支持 支持
数据导出工具 支持 支持
Web管理工具 支持 支持
多介质分级存储 支持 支持
Telegraf数据采集 支持 支持
Grafana数据可视化 支持 支持
RESTFul 支持 支持
C/C++ 支持 不支持
JDBC/ODBC 支持 不支持
GO 支持 不支持
Python 支持 不支持
数据库参数配置 支持 支持
配置副本数 支持 支持
数据时效 支持 支持
数据分区 支持 支持
流式计算 支持 不支持
微秒级精度 支持 支持
聚合函数支持 支持 支持
数据降采样 支持 支持
数据分页 支持 支持
数据插值 支持 支持
历史数据修改 不支持 支持
历史数据的标签修改 支持 支持
时间线删除 支持 支持
数据清空 支持 支持

表10 TDengine与OpenTSDB的功能对比

总结

此次测试,从数据库的读、写、查询、压缩比等方面对TDengine和OpenTSDB进行了对比测试。测试用数据集、测试程序源码、执行的SQL语句都可以从https://github.com/taosdata/TDengine/tree/master/tests/comparisonTest/ 下载,测试具备可重复性。

从测试结果上看,TDengine的性能远超OpenTSDB,写入性能约为25倍,读取性能约为32倍,聚合函数性能约为1000倍,按标签分组查询性能约为1000倍,按时间分组查询性能约为40倍,压缩比约为5倍,具体见下表。

  TDengine OpenTSDB
写入吞吐量 1477208 记录数/秒 57272 记录数/秒
100万条记录读取时间 0.21秒 6.57秒
1亿条记录取平均值时间 0.06秒 66.99秒
1亿条记录按标签分组取均值时间 0.123 126.41秒
1亿条记录按时间分组取均值时间 2.549秒 82.46秒

表11 TDengine与OpenTSDB的性能对比汇总

TDengine与OpenTSDB对比测试相关推荐

  1. TDengine与InfluxDB对比测试

    为帮助用户了解TDengine的指标,特将TDengine与InfluxDB做了读写性能对比测试. 官网博文同步发布地址:https://www.taosdata.com/blog/2019/07/1 ...

  2. 目前市场上最好用的时序数据库是什么?

    TDengine database 作为国内的一款开源的时序数据库,虽然在 GitHub.DB-Ranking.墨天轮等技术网站都有很好的数据表现,在短短的几年中也斩获了无数用户的好评,但也不敢说什么 ...

  3. 千亿级大数据如何存储的?

    在社区,有用户提到了一个这样的问题,千亿级大数据如何存储.这位同学给出了以下的使用背景. 我们关注到他的问题描述,虽然整体数据量并不是很大,但从应用场景上来看,非常符合时序数据库(Time-Serie ...

  4. CSDN开发者周刊 TDengine:专为物联网订制的大数据平台 YugaByte DB:高性能的分布式ACID事务数据库

    CSDN开发者周刊:   TDengine:专为物联网订制的大数据平台 YugaByte DB:高性能的分布式ACID事务数据库 CSDN开发者周刊:只为传递"有趣/有用"的开发者 ...

  5. 下个十年的 C 位:物联网趋势大剧透

    导读:本文带着大家把物联网彻底说清楚. 本文经授权转自公众号CSDN(ID:CSDNnews) 作者:马超 01 物联网基础逻辑的进化 1. 基础释义 用传感器.GPS.激光扫描器等信息传感设备,通过 ...

  6. 多地GitHub账号使用受限;Python之父考虑重构解释器;62岁程序员埋逻辑炸弹 | 开发者周刊...

    整理 | 张红月 出品 | CSDN(ID:CSDNnews) CSDN开发者周刊只为传递"有趣/有用"的开发者内容,点击Star(Github:https://github.co ...

  7. 找到Tiny OS的创始人,畅谈新时代的爆款“物联网”

    前几天发文笔者发文写了一篇<Tiny OS+nblot,值得程序员体验吗?>,凑巧结识了Tiny OS的创始人汪礼超同学,相谈甚欢,不但发现了很多共同的老友,而且查看了他们最新的代码之后, ...

  8. CSDN开发者周刊:因制裁 多个地区GitHub账号使用受限!Python 之父考虑重构解释器​​​​​​​

    CSDN开发者周刊:只为传递"有趣/有用"的开发者内容,点击Star(Github)! 本周热门项目 1.微软官方上线 Python 教程 微软上线一套<Develop wi ...

  9. 如何从InfluxDB/OpenTSDB无缝连接到TDengine

    小 T 导读:taosAdapter 是 TDengine 这款时序数据库(Time Series Database)的配套工具,是 TDengine 集群和应用程序之间的桥梁和适配器.当我们需要从数 ...

最新文章

  1. 网线传输速度测试_高效的以太网测试仪应该具备哪些功能?
  2. vue 数据劫持详解
  3. Linq To Xml学习 - 1.LINQ to XML 概述
  4. 豪横!程序员搭个人博客,一个 GitHub 账号足矣!
  5. 垃圾回收机制之标记清除算法
  6. jwt token注销_辩证的眼光搞懂 JWT 这个知识点
  7. javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplicati
  8. Memcached学习一:Memcached安装使用
  9. 【Windows 8 Store App】学习三:HTTP
  10. OSM地图本地发布-如何生成各省市矢量地图
  11. JavaScript调用Linux系统命令
  12. 网络共享计算机网络无法访问,局域网电脑无法访问共享文件网络共享失败怎么解决...
  13. 我的世界服务器无限时间,我的世界无限时间版本
  14. python3GUI--微博图片爬取工具V1.5(附源码)
  15. ArcGIS栅格数据四参数七参数投影变换
  16. 二叉树:二叉树的最近公共祖先
  17. 护眼灯哪些牌子好?央视推荐的护眼台灯
  18. axios中的put和patch有什么区别
  19. 十年后,我终于读懂了紫霞那滴留在至尊宝心中的泪
  20. Camera 的曝光校正概述

热门文章

  1. Wamp下Shopex的安装
  2. Node.js: exports 和 module.exports 的区别
  3. Firefox搜索框:自动出现添加搜索的提示
  4. js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)...
  5. Google News优化技巧
  6. 深度学习(参数选择)
  7. oracle重置sys密码
  8. 如何用Pygame写游戏(六)
  9. NIPS2018 Workshop一览
  10. DDL 创建与查询数据库