因为目前在做gps相关的,电动车里面有个终端,会不停的上报数据到后端,包括经纬度。
在地图上,我们需要获取电动车的路径,所以要知道他行走的时间。mysql这种肯定满足不了。
每天1w辆车,每5秒上报一次,数据量都过亿。
于是选择了TDengine(和sql差距不大,唯一差距大的就是字段不一样)
和其他时序数据库的性能对比:
SENSORO 处理智慧城市海量感知数据的数据库应用_Hadia Shi的博客-CSDN博客
注意:他的设计原理,为什么快,其实你用其他数据库也能做到这一点,对每个id不同的用户需要建立不同的表,然后查询的时候指定需要的表查询。他对时间字段,建立了索引。所以查询快。
相当于已经分库分表。
超级表的话,可以根据id,去查询子表,省去了你自己查询子表。不过感觉很鸡助,因为你还得建立子表
下载使用安装包立即开始 | TDengine 文档 | 涛思数据
官网都有,我不想写
注意的坑就是,varchar(20)类型对应他的nchar(20)
nchar(20)会直接占用20个空间。这里要注意。
另外建表语句,第一个必须为timestamp类型,他是以这个进行排序的,默认全部都帮你排序好了,用起来很舒服。满足外卖或者行车的相关地图。
使用jdbc连接,解压后,他有例子
直接copy里面的pom,或者你需要的东西直接用
一定要看他demo里面的代码。
要外部访问还要开启
systemctl start taosadapter
pom依赖:
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.0.0</version>
</dependency>
附代码;
import java.sql.*;
import java.util.Properties;
public class TDengineGPS {
//用时序数据库存储gps
public static void main(String[] args) {
try {
Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String jdbcUrl = "jdbc:TAOS-RS://xx.xx.xx.xx:6041/?user=root&password=ShiTeacherLoveU~520";
Properties properties = new Properties();
properties.setProperty("charset", "UTF-8");
properties.setProperty("locale", "en_US.UTF-8");
properties.setProperty("timezone", "UTC-8");
try {
Connection conn = DriverManager.getConnection(jdbcUrl,properties);
Statement stmt = conn.createStatement();
String dbname="tuli";
stmt.execute("use "+dbname);
String sql="select * from test123";
ResultSet resultSet = stmt.executeQuery(sql);//数据
ResultSetMetaData meta = resultSet.getMetaData();//字段名称
while (resultSet.next()){
for (int i = 1; i <= meta.getColumnCount(); i++) {
System.out.print(meta.getColumnLabel(i) + ": " + resultSet.getString(i) + "\t");
}
System.out.println();
}
resultSet.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
结果