闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <atom:link href="//www.yakult-sh.com.cn/tag/%E9%9B%86%E7%BE%A4/feed" rel="self" type="application/rss+xml" /> <link>//www.yakult-sh.com.cn</link> <description>TDengine | 楂樻€ц兘銆佸垎甯冨紡銆佹敮鎸丼QL鐨勬椂搴忔暟鎹簱 | 娑涙€濇暟鎹?/description> <lastBuildDate>Mon, 28 Nov 2022 03:45:16 +0000</lastBuildDate> <language>zh-Hans</language> <sy:updatePeriod> hourly </sy:updatePeriod> <sy:updateFrequency> 1 </sy:updateFrequency> <generator>//wordpress.org/?v=6.8.2</generator> <image> <url>//www.yakult-sh.com.cn/wp-content/uploads/2025/07/favicon.ico</url> <title>闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <link>//www.yakult-sh.com.cn</link> <width>32</width> <height>32</height> </image> <item> <title>闆嗙兢闂寸殑澶囦唤鍜岃縼绉诲伐浣滃浣曞仛锛熻繖浠?taosdump 鐨勫簲鐢ㄦ墜鍐岃鏌ユ敹 //www.yakult-sh.com.cn/tdengine-engineering/14502.html Mon, 10 Oct 2022 09:31:24 +0000 //www.yakult-sh.com.cn/?p=14502

?T DQؓ了让大家更好地进?TDengine 集群间的备䆾和迁Ud作,一Ƒ֐?taosdump 的工具应用程序被打造出来。在本篇文章中,我们?taosdump 的用方法和注意事项q行了相x总,l到有需要的开发者?/p>

作ؓ TDengine 的一Ƒַ具应用程序,taosdump 支持从运行中?TDengine 集群备䆾数据Qƈ备份的数据恢复到相同或另一个运行中?TDengine 集群中,其?Apache AVROQ?a href="//avro.apache.org/" target="_blank" rel="noreferrer noopener nofollow">//avro.apache.org/Q作为数据文件格式来存储备䆾数据?/p>

值得一提的是,taosdump 可以?Database、超U表或普通表作ؓ逻辑数据单元q行备䆾Q也可以?Database、超U表和普通表中指定时间段内的数据记录q行备䆾。在使用Ӟ我们可以?taosdump 指定数据备䆾的目录\径;如果不指定位|,它就会默认将数据备䆾到当前目录;如果指定的位|已l有数据文gQtaosdump 会提C用户ƈ立即退出,避免数据被覆盖。这意味着同一路径只能被用于一ơ备份。如果大家看到相xC,务必心操作?/p>

但需要注意的是,taosdump 是一个逻辑备䆾工具Q它不应被用于备份Q何原始数据、环境设|?g信息、服务端配置或集的拓扑l构?/p>

安装

taosdump 有以下两U安装方式:

  • 安装 taosTools 官方安装包,你可以进?//www.yakult-sh.com.cn/all-downloads 此页面找?taosTools q进行下载安装?/li>
  • 单独~译 taosTools q安装,详情请参?taos-tools 仓库Q?a href="//github.com/taosdata/taos-tools" target="_blank" rel="noreferrer noopener nofollow">//github.com/taosdata/taos-toolsQ?/li>

常用使用场景

taosdump 备䆾数据

  1. 备䆾所有数据库Q?/strong>指定 -A ?--all-databases 参数Q?/li>
  2. 备䆾多个指定数据库:使用 -D db1,db2,... 参数Q?/li>
  3. 备䆾指定数据库中的某些超U表或普通表Q?/strong>使用 dbname stbname1 stbname2 tbname1 tbname2 ... 参数Q注意这U输入序列第一个参Cؓ数据库名Uͼ且只支持一个数据库Q第二个和之后的参数数据库中的超U表或普通表名称Q中间以I格分隔Q?/li>
  4. 备䆾pȝ log 库:TDengine 集群通常会包含一个系l数据库Q名?logQ这个数据库内的数据?TDengine 自我q行的数据,taosdump 默认不会?log 库进行备份。如果有特定需求对 log 库进行备份,可以使用 -a ?--allow-sys 命o行参数?/li>
  5. “宽容”模式备份:taosdump 1.4.1 之后的版本提?-n 参数?-L 参数Q用于备份数据时不用{义字W和“宽容”模式,可以在表名、列名、标{֐没用{义字W的情况下减备份数据时间和备䆾数据占用I间。如果不定是否W合使用 -n ?-L 条gӞ请用默认参数进行“严格”模式进行备份。{义字W的说明请参考官Ҏ档(//docs.yakult-sh.com.cn/taos-sql/escape/Q?/li>
需要注?/h5>
  • taosdump 1.4.1 之后的版本提?-I 参数Q用于解?avro 文g schema 和数据,如果指定 -s 参数只解析 schema?/li>
  • taosdump 1.4.2 之后的备份?-B 参数指定的批ơ数Q默认gؓ 16384Q如果在某些环境下由于网l速度或磁盘性能不D “Error actual dump .. batch ..” Q可以通过 -B 参数调整为更的D行尝试?/li>
  • taosdump 的导Z支持中断恢复Q所以当q程意外l止后,正确的处理方式是删除当前已导出或生成的所有相x件?/li>
  • taosdump 的导入支持中断恢复,但是当进E重新启动时Q会收到一些“表已经存在”的提示Q可以忽视?/li>

taosdump 恢复数据

如果我们惌恢复指定路径下的数据文gQ方式是Q?-i 参数加上数据文g所在\径。如前文提及Q我们不能用同一个目录备份不同数据集合,也不能在同一路径多次备䆾同一数据集,否则备䆾数据会造成覆盖或多ơ备份?/p>

需要注?/h5>

taosdump 内部使用 TDengine stmt binding API q行恢复数据的写入,为提高数据恢复性能Q目前?16384 Zơ写入批ơ。如果备份数据中有较多列的数据,可能会导致?“WAL size exceeds limit” 错误Q此时可以通过使用 -B 参数调整Z个更的D行尝试?/p>

写在最?/h2>

如果大家惌查阅 taosdump 详细命o行参数列表,可以q入 //docs.yakult-sh.com.cn/reference/taosdump/ 获取。毫无疑问,如果你掌握了上述 taosdump 使用指南Q一定能帮助你较为完地解决所遭遇的数据迁U问题。但如果在应用过E中出现了一些个性化NQ也无需心急,你可以进?TDengine 用户交流寻扑ָ助?/p>

TDengine Database
]]> 闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <atom:link href="//www.yakult-sh.com.cn/tag/%E9%9B%86%E7%BE%A4/feed" rel="self" type="application/rss+xml" /> <link>//www.yakult-sh.com.cn</link> <description>TDengine | 楂樻€ц兘銆佸垎甯冨紡銆佹敮鎸丼QL鐨勬椂搴忔暟鎹簱 | 娑涙€濇暟鎹?/description> <lastBuildDate>Mon, 28 Nov 2022 03:45:16 +0000</lastBuildDate> <language>zh-Hans</language> <sy:updatePeriod> hourly </sy:updatePeriod> <sy:updateFrequency> 1 </sy:updateFrequency> <generator>//wordpress.org/?v=6.8.2</generator> <image> <url>//www.yakult-sh.com.cn/wp-content/uploads/2025/07/favicon.ico</url> <title>闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <link>//www.yakult-sh.com.cn</link> <width>32</width> <height>32</height> </image> <item> <title>闆嗙兢闂寸殑澶囦唤鍜岃縼绉诲伐浣滃浣曞仛锛熻繖浠?taosdump 鐨勫簲鐢ㄦ墜鍐岃鏌ユ敹 //www.yakult-sh.com.cn/opentsdb/12633.html Sat, 16 Jul 2022 08:06:00 +0000 //www.yakult-sh.com.cn/?p=12633 随着物联|、R联网的高速发展,IT 基础设施规模的增大,数据的采集量来大Q单机是没有办法解决问题的,底层数据库必d有水qx展能力。大部分开源的时序数据库都不是分布式的Q换句话_是集群版不开源,包括 InfluxDB 集群功能也只能在企业版中使用。很多企业用的是开源时序数据库的单机版Q后lؓ了应Ҏv量数据的处理Q只好自己投入h力物力,在单机版的基上,开发自q ProxyQ对数据q行分片处理。对于数据写入,q种Ҏ单而且有效。但是对于查询,往往牉|多个节点Q那?Proxy p做各U查询的聚合Q因此开发的工作量很大?/p>

有些公司Z避免ȝQ就选用 OpenTSDBQ因为它把分布式版本也开源了。从使用的角度来看,OpenTSDB 底层的存储引擎用的是 HBaseQ安装维护极为复杂,存储压羃性能不够Q查询效率也很低Q不是一个优U的品。但它仍然有相当多的用户Q这唯一的原因就是由于它支持分布式,可以水^U性扩展?/p>

TDengine 的设计是Z单个g、Y件系l不可靠Q基于Q何单台计机都无法提供够计能力和存储能力处理量数据的假设而进行设计的。因?TDengine 从研发的W一天vQ就是按照水qx展、高可用架构q行设计的。通过Ҏ据进行分区、分片,而且采用虚拟节点(vnode)技术,保证pȝ的处理能力是水^扩展的。如果要增加pȝ的处理能力,只需要增加新的节点即可?/p>

更好的是Q和 InfluxDB集群功能闭源不同Q?020q?月,TDengine 团队集版开源了?br>TDengine 是通过数据采集点以及时间两个维度,对大数据q行切分Q实现水qx展的?/p>

作ؓ一ƾ时序数据库QTDengine 是如何实现ƈ开源其分布式集功能? - TDengine Database 时序数据? class=

分片Q在 TDengine Database 的设计与实现里,一个集有多个节点Q每个节点可以有一个或多个虚拟节点(vnode)Q每个虚拟节炚w存储了一定数量的数据采集点的数据Q而一个数据采集点的数据永q只存放在一?vnode 里。这样如果有很多数据采集点,q些数据采集点的数据会分布在多?vnode 上,分布在多个节炚w。数据写入时QTDengine Database 的客L要写入的数据直接写入对应的 vnodeQ从而实现写入的水^扩展。对于单个数据采集点数据的查询,毫无疑问Q是水^扩展的,节点多Q吞吐率p大。对于聚合查询,查询h先发送到对应?vnode 里,vnode 先做完聚合操作,客户端然后将来自多个 vnode 的查询结果做W二ơ聚合,因ؓ vnode 数量有限Q这样在客户端做的聚合查询计量不大Q从而实现聚合查询的水^扩展能力?/p>

分区Q除数据分片之外,TDengine q将一?vnode 里存储的时序数据按照旉D进行切分。每个时间段的数据都一定保存在一P不同旉D늚数据不会有交集,旉D可以是一天,几天Q一周,q戯己定义。按照时间段切分时序数据有很多好处,查询数据ӞҎ旉D,可以直接定位要查扄文gQ从而加快查询速度。另外一斚wQ可以高效地实现数据保留{略。超q最长保留时间的数据Q直接删除一个时间段对应的文件即可。而且按照旉D切分数据,q可以方便实现多U存储,L数据攑֜不同存储介质上,q一步降低存储成本?/p>

TDengine q通过虚拟节点l技术来提供pȝ的高可用。不同物理节点上?vnode 可以形成一个虚拟节点组Q这个虚拟节点组里的数据是通过 Master-Slave 来进行同步的Q来保证q个虚拟节点l内数据的一致性。数据写入只能在 master q行Q但查询可以?master ?slave 上同时进行。如?Master 出现故障Q系l将自动选主Q这h保证pȝ的高可用Q不会由于某台机器宕机,而无法对外提供服务?/p>

关于集群的具体用,L?a href="//docs.yakult-sh.com.cn/cluster/" target="_blank" rel="noreferrer noopener nofollow">集群理》?/p> ]]> 闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <atom:link href="//www.yakult-sh.com.cn/tag/%E9%9B%86%E7%BE%A4/feed" rel="self" type="application/rss+xml" /> <link>//www.yakult-sh.com.cn</link> <description>TDengine | 楂樻€ц兘銆佸垎甯冨紡銆佹敮鎸丼QL鐨勬椂搴忔暟鎹簱 | 娑涙€濇暟鎹?/description> <lastBuildDate>Mon, 28 Nov 2022 03:45:16 +0000</lastBuildDate> <language>zh-Hans</language> <sy:updatePeriod> hourly </sy:updatePeriod> <sy:updateFrequency> 1 </sy:updateFrequency> <generator>//wordpress.org/?v=6.8.2</generator> <image> <url>//www.yakult-sh.com.cn/wp-content/uploads/2025/07/favicon.ico</url> <title>闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <link>//www.yakult-sh.com.cn</link> <width>32</width> <height>32</height> </image> <item> <title>闆嗙兢闂寸殑澶囦唤鍜岃縼绉诲伐浣滃浣曞仛锛熻繖浠?taosdump 鐨勫簲鐢ㄦ墜鍐岃鏌ユ敹 //www.yakult-sh.com.cn/influxdb-proxy/12402.html Fri, 08 Jul 2022 08:34:02 +0000 //www.yakult-sh.com.cn/?p=12402 同在基础软g领域创业Q?strong>时序数据?/a> InfluxDB集功能闭源是完全可以理解的。但 InfluxDB集群 是刚需Q是核心痛点Q如果核心痛点不解决Q那可替代方案会很多Q品本w的推广׃大打折扣Q开源的价值就大ؓ下降?/p>

TDengine 的设计是Z单个g、Y件系l不可靠Q基于Q何单台计机都无法提供够计能力和存储能力处理量数据的假设进行设计的。因?TDengine 从研发的W一天vQ就按照分布式高可靠架构q行设计Q是支持水^扩展的,q样M单台或多台服务器发生g故障或Y仉误都不媄响系l的可用性和可靠性。ƈ且和 InfluxDB 不同的是QTDengine 选择集功能开源。本文重点讲?TDengine 集群的主要逻辑单元的设计?/p>

TDengine 分布式架构的逻辑l构囑֦下:

性能完胜InfluxDBQ集功能也开源,解读TDengine集群的主要逻辑单元 - TDengine Database 时序数据? class=

一个完整的 TDengine pȝ是运行在一到多个物理节点上的,逻辑上,它包含数据节?dnode)、TDengine 应用驱动(taosc)以及应用(app)。系l中存在一到多个数据节点,q些数据节点l成一个集?cluster)。应用通过 taosc ?API ?TDengine 集群q行互动。下面对每个逻辑单元q行要介l?/p>

物理节点(pnode)Q?/strong> pnode 是一独立q行、拥有自q计算、存储和|络能力的计机Q可以是安装有OS的物理机、虚拟机?Docker 容器。物理节点由光|的 FQDN (Fully Qualified Domain Name)来标识。TDengine 完全依赖 FQDN 来进行网l通讯Q如果不了解 FQDNQ请看博?a href="//www.yakult-sh.com.cn/engineering/1824.html">《一文章说清楚 TDengine ?FQDN?/a>?/p>

数据节点(dnode)Q?/strong> dnode ?TDengine 服务器侧执行代码 taosd 在物理节点上的一个运行实例,一个工作的pȝ必须有至一个数据节炏Vdnode 包含零到多个逻辑的虚拟节?vnode)Q零或者至多一个逻辑的管理节?mnode)。dnode 在系l中的唯一标识由实例的 End Point (EP)军_。EP ?dnode 所在物理节点的 FQDN (Fully Qualified Domain Name)和系l所配置的网l端口号(Port)的组合。通过配置不同的端口,一个物理节?一台物理机、虚拟机或容器)可以q行多个实例Q或有多个数据节炏V?/p>

虚拟节点(vnode)Q?/strong> 为更好的支持数据分片、负载均衡,防止数据q热或倾斜Q数据节点被虚拟化成多个虚拟节点(vnodeQ图?V2, V3, V4{?。每?vnode 都是一个相对独立的工作单元Q是时序数据存储的基本单元,h独立的运行线E、内存空间与持久化存储的路径。一?vnode 包含一定数量的表(数据采集点)。当创徏一张新表时Q系l会查是否需要创建新?vnode。一个数据节点上能创建的 vnode 的数量取决于该数据节Ҏ在物理节点的g资源。一?vnode 只属于一?DBQ但一?DB 可以有多?vnode。一?vnode 除存储的时序数据外,也保存有所包含的表?schema、标{ր等。一个虚拟节点由所属的数据节点的EPQ以及所属的 VGroup ID 在系l内唯一标识Q由理节点创徏q管理?/p>

理节点(mnode)Q?/strong> 一个虚拟的逻辑单元Q负责所有数据节点运行状态的监控和维护,以及节点之间的负载均?图中 M)。同Ӟ理节点也负责元数据(包括用户、数据库、表、静态标{)的存储和理Q因此也UCؓ Meta Node。TDengine 集群中可配置多个(最多不过 3 ? mnodeQ它们自动构建成Z个虚拟管理节点组(图中 M0, M1, M2)?/p>

mnode 间采?master/slave 的机制进行管理,而且采取Z致方式进行数据同? M数据更新操作只能?Master 上进行。mnode 集群的创建由pȝ自动完成Q无需人工q预。每?dnode 上至多有一?mnodeQ由所属的数据节点的EP来唯一标识。每?dnode 通过内部消息交互自动获取整个集群中所?mnode 所在的 dnode 的EP?/p>

虚拟节点l?VGroup)Q?/strong> 不同数据节点上的 vnode 可以l成一个虚拟节点组(vnode group)来保证系l的高可靠。虚拟节点组内采?master/slave 的方式进行管理。写操作只能?master vnode 上进行,pȝ采用异步复制的方式将数据同步?slave vnodeQ这L保了一份数据在多个物理节点上有拯。一?vgroup 里虚拟节点个数就是数据的副本数。如果一?DB 的副本数?NQ系l必L臛_ N 数据节点。副本数在创建DB旉过参数 replica 可以指定Q缺省ؓ 1。?TDengine 的多副本Ҏ,可以不再需要昂늚盘阵列{存储设备,可以获得同L数据高可靠性。虚拟节点组q理节点创建、管理,q且q理节点分配一个系l唯一?IDQVGroup ID。如果两个虚拟节点的 vnode group ID 相同Q说明他们属于同一个组Q数据互为备份。虚拟节点组里虚拟节点的个数是可以动态改变的Q容许只有一个,也就是没有数据复制。VGroup ID 是永q不变的Q即使一个虚拟节点组被删除,它的ID也不会被收回重复利用?/p>

TAOSCQ?/strong> taosc ?TDengine l应用提供的驱动E序(driver)Q负责处理应用与集群的接口交互,提供 C/C++ 语言原生接口Q内嵌于 JDBC、C#、Python、Go、Node.js 语言q接库里。应用都是通过 taosc 而不是直接连接集中的数据节点与整个集群q行交互的。这个模块负责获取ƈ~存元数据;插入、查询等h转发到正的数据节点Q在把结果返回给应用Ӟq需要负责最后一U的聚合、排序、过滤等操作。对?JDBC、C/C++、C#、Python、Go、Node.js 接口而言Q这个模块是在应用所处的物理节点上运行。同Ӟ为支持全分布式的 RESTful 接口Qtaosc ?TDengine 集群的每?dnode 上都有一q行实例?/p>

以上是 TDengine 集群的主要逻辑单元Q我们将会通过更多文章Q向大家解读 TDengine 集群的更多设计秘c?/p> ]]> 避免创业的大忌,我ؓ何给 TDengine 只选择了集、高性能?SQL 支持三大特点Q?/title> <link>//www.yakult-sh.com.cn/jeffsthoughts/6232.html</link> <dc:creator><![CDATA[Jeff Tao]]></dc:creator> <pubDate>Sun, 27 Feb 2022 02:06:00 +0000</pubDate> <category><![CDATA[爱倒腾的程序员]]></category> <category><![CDATA[集群]]></category> <guid isPermaLink="false">//yakult-sh.com.cn/?p=6232</guid> <description><![CDATA[只有聚焦Q你才会真正思考品在市场的独特定位,把某个亮点做到极致。只有独特,才能真正吸引用户Q才能真的受人喜Ƣ。]]></description> <content:encoded><![CDATA[ <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>有h在知乎上提问Q“作为国产开源的<a href="//www.yakult-sh.com.cn/" data-internallinksmanager029f6b8e52c="2" title="时序数据? target="_blank" rel="noopener">时序数据?/a>QTDengine 的哪些优Ҏ吸引你?”。这促我将自己对一些问题,包括创业本n的思考整理出来,分nl大Ӟ希望能给众多研发同学和创业者带来一些启发?/p></blockquote> <p>当我?2016 q底开始启?TDengine q个目Q瞄准时序数据库QTime-Series DatabaseQ这个方向时Q市Z已经有很多时序数据库Q包?InfluxDB、OpenTSDB、TimeScaleDB、KDB+、Prometheus、RRDTool 以及 Graphite {。在传统行业里,?a href="//www.yakult-sh.com.cn/" data-internallinksmanager029f6b8e52c="4" title="实时数据? target="_blank" rel="noopener">实时数据?/a>Q比?PI、iHistorian {。那如果我再做一个,到底有什么优势?怎么做出差异化,怎么推广它?作ؓ一个创业者,是必认真思考的。我下面从几个点来分析?nbsp;</p> <h3 class="wp-block-heading"><strong>1Q分布式</strong></h3> <p>?2016 q底到现在,大部分时序数据库都不是分布式的,换句话说Q它们不支持水^扩展。即便是 InfluxDBQ也只有企业版支持集,开源版是不支持的。而传l实时数据库更是没有一个支持水qx展,最多是双机热备。但是随着物联|、R联网的高速发展,IT 基础设施规模的增大,数据的采集量来大Q单机是没有办法解决问题的,底层数据库必d有水qx展能力?nbsp;</p> <p>很多企业使用的是开源时序数据库的单机版Q后lؓ了应Ҏv量数据的处理Q只好自己投入h力物力,在单机版的基上,开发自q ProxyQ对数据q行分片处理。对于数据写入,q种Ҏ单而且有效。但是对于查询,往往牉|多个节点Q那?Proxy p做各U查询的聚合Q因此开发的工作量很大。有些公ؓ了避免麻烦,选用 OpenTSDBQ因为它把分布式版本也开源了?nbsp;</p> <p>从用的角度来看QOpenTSDB 底层的存储引擎用的是 HBaseQ安装维护极为复杂,存储压羃性能不够Q查询效率也很低Q不是一个优U的品。但它仍然有相当多的用户Q这唯一的原因就是由于它支持分布式,可以水^U性扩展?/p> <p>因此Q在 2016 q底Q整?TDengine Database 的设计从W一天vQ就是支?a href="//yakult-sh.com.cn/scalable" rel="nofollow noopener" target="_blank">分布?/a>的。ؓ了便于更多用开源版本的用户用得更好Q在 2020 q?8 月,我们?TDengine 的分布式版本开源了。分布式版本开源后QTDengine 的用户量持箋增长Q全球安装实例数已经过 10 万,每天新增实例都在 200 以上Q这是一个相当可观的数字。这证明了我们将 TDengine 分布式版本开源是非常明智的决定?nbsp;</p> <h3 class="wp-block-heading"><strong>2Q高性能</strong></h3> <p>时序数据及时序数据的应用有其典型特点Q详l请?a href="//tdengine.com/2019/07/09/86.html" rel="nofollow noopener" target="_blank">官网博客</a> )Q如果充分利用时序数据的特点Q我们可以将数据写入和查询性能大幅提高Q数据压~率也能大幅提高?nbsp;我之所以在 2016 q决定开?TDengineQ其中一个核心原因是我认?InflxuDB q没有充分利用时序数据特炏V如果我充分利用Q就能在性能上碾压它?/p> <p>在仔l研I之后,我提Z?a href="//www.yakult-sh.com.cn/docs/cn/v2.0/architecture#model">一个数据采集点一张表</a>”的设计Q让一个采集点来的数据按照旉序一块一块的存,q且使用<a href="//www.yakult-sh.com.cn/docs/cn/v2.0/architecture#model">列式存储</a>。这样就会得写入变成简单的q加操作Q而且一ơ读?IO 操作p把一个数据采集点的数据点成片d。而时序数据的查询分析往往是一个时间段Q数据命中率一下提高很多,q样׃使查询效率极其之高,而且压羃率也会极其之高。同时我提出“超U表”概念,来解军_个数据点数据高效聚合的问题。通过标签需要聚合的数据采集点先qo出来Q大q减需要扫描的数据集,从而大q提升聚合速度?nbsp;</p> <p>那么性能重要吗?毫无疑问非常重要Q因为如果用户不兛_性能Q那选择通用数据库来处理时序数据可以了。如果都是时序数据库Q用户当然也会选择性能或效率更高的产品。因此从研发的第一天vQ我和整个团队一直在q求<a href="//yakult-sh.com.cn/fast" rel="nofollow noopener" target="_blank">极致的性能</a>?nbsp;</p> <h3 class="wp-block-heading"><strong>3QSQL 支持</strong></h3> <p>M一ƾ新产品Q都有入门门槛。降低门槛最好的Ҏ是不改变用户习惯。SQL 是全球最行的查询语aQ学q计机的h都会?SQL 写查询语句?/p> <p>时序数据库ƈ不新鲜,已经有相当长的历Ԍ但相当多的时序数据库或实时数据库都有自己的查询语aQ比?InfluxDB、OpenTSDB、Prometheus {都有自q查询语言Q这样大大增加了学习成本Q而且也增加了应用的迁UL本?nbsp;</p> <p>采用 SQL q有一个好处,是能与众多?BI、可视化工具ҎQ生态丰富很多。如果采用自q发的查询语言Q所有工具都要定制化开发,隑ֺ一下大了很多。kdb 是最典型的例子,完全是自有语法,因此虽然很多性能指标相当不错Q但十几q过去,q是不温不火?nbsp;</p> <p>?TDengine 研发的第一天vQ我决定采?a href="//yakult-sh.com.cn/sql-support" rel="nofollow noopener" target="_blank">标准 SQL</a> 做查询语aQƈ且采用关pL据库模型Q而不?InfluxDB、OpenTSDB ?Prometheus {数据库?tag-set 模型。其Ҏ原因是想降低学习成本。目前看来,q个{略是极其正的?nbsp;</p> <p>涛思数据团队还在查询分析上投入相当大的研发力量,希望 TDengine h强大的时序数据分析功能?nbsp;</p> <h3 class="wp-block-heading"><strong>4Q开?/strong></h3> <p>基础软g在开源大势所的情况下,如果不将代码Q特别是核心代码开源,惌赢得市场是完全不可能的。因此,我们才将 TDengine 完全开源。开源涛思数据获得了高速增长,q是一个完全正的军_?nbsp;</p> <p>但从产品角度来看Q开源是 TDengine 的一大优势吗Q看h是,但细想一下,其实不是Q它只是取得成功的一个必要条件。因为全球市Z开源的的时序数据库产品很多Q中国本土开源的时序数据库也不止 TDengine 一Ӟ大家不会׃ TDengine 是开源的选择它,而是有其他特Ҏ会选用它?nbsp;</p> <p>如果市场上还没有开源的时序数据库,那么开源就?TDengine 最大的亮点。我军_集开源,Ҏ的原因是׃ InfluxDB 没有把集开源,q给了我们高速增长的Z。只有别人做不到或比不上你的功能或性能Q那才是你需要宣传的特点。功能或性能指标的跟随者永q不值得做Q何推qѝ?nbsp;</p> <h3 class="wp-block-heading"><strong>5Q其?/strong></h3> <p>TDengine q有很多其他优点Q比?All in One 的特性,TDengine 自n带有~存、流计算、数据订阅等功能Q因此在很多场景下,用户不再需要集?Kafak, Redis, Spark, Zookeeper {YӞTDengine 可以作Z个大数据q_来用,能大q降低整个系l的复杂度和q维成本。与大部分研发同学一P我也喜欢|列各种开发的功能和亮点,我还可以|列 TDengine 的很多很多其他优炏V?nbsp;</p> <p>但是作ؓ一个连l创业者,很清?strong>无论是品还是市场宣传,必须做减?/strong>。研发出w的创业者最喜欢的就是不断加功能Q在宣传上胡子眉毛一把抓Q不H出重点Q这是创业者的大忌。用戯看上你的产品Q往往不是你功能全Q而是产品的某一个亮Ҏ动了他,特别是早期的用户Q完全是喜欢产品的某功能才容忍了诸多其他方面的不。宣传上也是Q众多的特点无法让hCQ能C一个就相当不错。我们要做的是,把真正的亮点做到极致Q而且做最大程度的传播Q让Zh都知道它Q喜Ƣ它?nbsp;</p> <p>做减法对于研发同学是极其困难的,因ؓ不将自己q力没日没夜开发的功能宣传出去Q太让自己没有成感。但作ؓ创业者,是与要习惯思维做斗争?strong>只有聚焦Q你才会真正思考品在市场的独特定位,把某个亮点做到极致。只有独特,才能真正吸引用户Q才能真的受人喜Ƣ?/strong> </p> <p>因此q去的几q_我们一直强?TDengine 是一个物联网大数据^収ͼ聚焦在物联网l分市场Q强调的?All in One 的特性,q样p与其他时序数据库做出差异化来?nbsp;</p> <p>?TDengine 开?2 q多旉Q大部分用户q是把我们当做时序数据库来用,而且不仅是物联网行业用户在用Q金融、IT q维、能源、汽车、工业互联网{行业的用户也在用。经q很多思考之后,我决定将 TDengine 重新定位为时序数据库?/p> <div id="sqinis2ngw" class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="446" src="//yakult-sh.com.cn/wp-content/uploads/2022/02/截屏2022-02-28-上午10.39.56-1024x446.png" alt="TDengine新网? class="wp-image-6234" title="避免创业的大忌,我ؓ何给 TDengine 只选择了集、高性能?SQL 支持三大特点Q?- TDengine Database 时序数据? srcset="//www.yakult-sh.com.cn/wp-content/uploads/2022/02/截屏2022-02-28-上午10.39.56-1024x446.png 1024w, //www.yakult-sh.com.cn/wp-content/uploads/2022/02/截屏2022-02-28-上午10.39.56-300x131.png 300w, //www.yakult-sh.com.cn/wp-content/uploads/2022/02/截屏2022-02-28-上午10.39.56-768x334.png 768w, //www.yakult-sh.com.cn/wp-content/uploads/2022/02/截屏2022-02-28-上午10.39.56.png 1440w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>TDengine 新网?<a href="//www.tdengine.com" target="_blank" rel="noreferrer noopener nofollow">www.tdengine.com</a></figcaption></figure></div> <h3 class="wp-block-heading"><strong>6Q三大优?/strong></h3> <p>那么作ؓ时序数据库,怎么与众多的时序数据?PK 或差异化Q我个h认ؓ是Q高性能、分布式?SQL 支持。这三个特点以让我说服 InfluxDB, OpenTSDB, TimeScale 的客户切换到 TDengine 上来。因此在我们最q的|站改版Ӟ大胆地将 TDengine Database ?Slogan 定ؓQ?strong>高性能、分布式、支?SQL 的时序数据库?/strong> </p> <p>贪多g烂,用户没法C你那么多特点优点Q因此我们列出高性能、分布式、支?SQL q三个优点够,其他优点q戯己去ȝ和体会,让他们有惊喜。只要将三个优点做实做得_好,TDengine 与其他时序数据库׃有够的差异化,׃定能赢得开发者的信赖Q赢得市场?/p> <p><br>陶徏?/p> <p>2022 q?2 ?26 ?/p> ]]></content:encoded> </item> <item> <title>【社区精选】在Docker环境下,TDengine的客LZ么连不上集群Q?/title> <link>//www.yakult-sh.com.cn/tdengine-engineering/2332.html</link> <dc:creator><![CDATA[Yu Chen]]></dc:creator> <pubDate>Sat, 08 May 2021 06:11:03 +0000</pubDate> <category><![CDATA[Chinese]]></category> <category><![CDATA[技术文?- 时序数据库]]></category> <category><![CDATA[集群]]></category> <guid isPermaLink="false">//www.yakult-sh.com.cn.cn:88/blog/?p=2332</guid> <description><![CDATA[TDengine客户端如何与集群跨网D通信]]></description> <content:encoded><![CDATA[ <p>作者|陈玉</p> <p>最q,在TDengine Database的一个社区群中突发了一Z重的灌水事g。几位群友不眠不休地聊天Q可以说是废寝忘食。那么到底是什么话题能让他们凌晨四点还在忘我地讨论Q?/p> <p>q个话题是——如何完善Docker环境下TDengine Database的集搭建。“什么?除了你们官方自己Z外,怎么会有用户加班加点地讨论如何完善Docker环境的集搭建,q也太假了。?/p> <div id="sqinis2ngw" class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="644" height="398" src="//tdengine.com/wp-content/uploads/2021/05/image.png" alt="聊天截图1" class="wp-image-2333" title="【社区精选】在Docker环境下,TDengine的客LZ么连不上集群Q?- TDengine Database 时序数据? srcset="//www.yakult-sh.com.cn/wp-content/uploads/2021/05/image.png 644w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-300x185.png 300w" sizes="auto, (max-width: 644px) 100vw, 644px" /></figure></div> <p>好吧Q我们承认:其实是有一个叫OliverQ群늧Q的用户遇到了这L问题——辛辛苦苦搭hDocker环境下的TDengine集群在客Lq不上了。接下来Q就引发了群里的二位热心大{的讨Z休,直到惛_最后的解决Ҏ?/p> <p>事情的经q是q样的:</p> <p>该用L数据库集装在这台Linux服务器上Qip:10.0.31.2Q,容器ip所在的|络是由Docker在宿L创徏的虚拟网l?72.19.0.0/16。三个容器的hostname和节点ip分别Qtaosnode1Q?72.19.0.41Q、taosnode2Q?72.19.0.42Q、taosnode3Q?72.19.0.43Q?/p> <p>各个节点配置如下Q?/p> <pre class="wp-block-code"><code>taosnode1: firstEp=taosnode1:6030,secondEp=taosnode2:6030,fqdn=taosnode1;端口映射Q?6030-16042:6030-6042Qtcp/udpQ?taosnode2: firstEp=taosnode1:6030,secondEp=taosnode2:6030,fqdn=taosnode2;端口映射Q?6030-26042:6030-6042Qtcp/udpQ?taosnode3: firstEp=taosnode1:6030,secondEp=taosnode2:6030,fqdn=taosnode3;端口映射Q?6030-36042:6030-6042Qtcp/udpQ?/code></pre> <p>按照官方文档的指C努力折腾一番后QOliverl于搭v了这个集。添加完节点之后Q他忐忑地敲下了“show dnodes”,随着三个READY映入眼帘后———舒坦了?/p> <p>服务端没有问题,接下来该客户端了。他打开了自q一台ip?0.0.31.5Q与集群宿主机同一|段Q的WindowsLQ迅速地在上面安装了个TDengine客户端,dhosts信息Q做好\由,2.8MBQ傻瓜式安装Q轻松便Pq接集群一气呵成。“show dnodes”随着三个READY再次映入眼帘后———又舒坦了?/p> <p>Oliver十分满意Q然而,他马上发C情可能ƈ不像惌中的那么单?/p> <p>׃业务需要,他还需要完成客LQ?0.0.2.61Q跨|段q接服务端集(Zip:10.0.31.2的Docker环境下的集群Q。ping得通宿LQtelnet得通集映出来的端口Q用taosq接集群Q一L操作也和此前一样顺利。于是他再次敲下“show dnodes”——万万没惛_Q这时o所有TDengine用户都深恶痛l的“DB errorQUnable to establish connection”出C。于是,他便在群中抛Z自己的问题?/p> <div id="sqinis2ngw" class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1024" height="312" src="//tdengine.com/wp-content/uploads/2021/05/image-1-1024x312.png" alt="DB errorQUnable to establish connection" class="wp-image-2334" title="【社区精选】在Docker环境下,TDengine的客LZ么连不上集群Q?- TDengine Database 时序数据? srcset="//www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-1-1024x312.png 1024w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-1-300x91.png 300w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-1-768x234.png 768w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-1.png 1222w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div> <p>上文说到的两位热心的同学是在这个时候出现的。一位是TDengine的外部Contributor——Freemine。另一位是路见问题拔刀相助的热心大佬pigwing?/p> <p>׃集群本n没有M使用问题Q唯一的区别就是客Lq接服务器的方式变成了跨|段。所以,一开始大家的思\是——既然走宿主机的端口不行Q那p试直接连到Docker环境下的ip吧。遗憄是,跨网D连接Docker环境下内部ip的想法没能实现?/p> <p>接着大家推测QTDengine靠的是EndPointQEPQ来识别数据节点Q而EP=FQDN+端口。可客户端连接已l成功,只是无法Ҏ据操作,在FQDN无误的情况下Q大家猜是集群内的端口出现了问题,从而没拿到集群的拓扑信息。接下来Q从最初的了解环境Q到一步一步的排查问题Q三个锲而不舍的工程师在里??2日讨论到4?5Q最晚的时候凌?点多都有人在Uѝ?/p> <div id="sqinis2ngw" class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1024" height="828" src="//tdengine.com/wp-content/uploads/2021/05/image-2-1024x828.png" alt="聊天截图2" class="wp-image-2335" title="【社区精选】在Docker环境下,TDengine的客LZ么连不上集群Q?- TDengine Database 时序数据? srcset="//www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-2-1024x828.png 1024w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-2-300x243.png 300w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-2-768x621.png 768w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-2.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div> <p>l于Q在三h的通力合作多次试错下,4?4日凌?点——freemine提出了一个行之有效的最l解x案(文字q多只截囑օ键部分)</p> <div id="sqinis2ngw" class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="707" height="1024" src="//tdengine.com/wp-content/uploads/2021/05/image-3-707x1024.png" alt="聊天截图3" class="wp-image-2336" title="【社区精选】在Docker环境下,TDengine的客LZ么连不上集群Q?- TDengine Database 时序数据? srcset="//www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-3-707x1024.png 707w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-3-207x300.png 207w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-3-768x1113.png 768w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-3.png 1063w" sizes="auto, (max-width: 707px) 100vw, 707px" /></figure></div> <div id="sqinis2ngw" class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1024" height="537" src="//tdengine.com/wp-content/uploads/2021/05/image-4-1024x537.png" alt="聊天截图4" class="wp-image-2337" title="【社区精选】在Docker环境下,TDengine的客LZ么连不上集群Q?- TDengine Database 时序数据? srcset="//www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-4-1024x537.png 1024w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-4-300x157.png 300w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-4-768x403.png 768w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-4.png 1054w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div> <p>大功告成Q经q测试后Q一切顺利!</p> <p>那么Qfreemine的集搭建方案和最初的集群搭徏有什么区别呢Q?/p> <p>虽然q程曲折Q但是最后我们仔l对比一下两者的Ҏ׃发现Q它们的区别只有在端口配置q一块不一栗freemine的方案是在每一个单机的serverport都修改了不一L倹{taosnode1节点的serverport?030—映射L?030端口Qtaosnode2节点的serverport?030–映射L?030端口Qtaosnode3节点的serverport?030–映主机的8030端口?/p> <p>而提问者Oliver最初的各个节点的serverport都是没做修改的默?030Q映到宿主机的时候是16030Q?6030Q?6030。就是这L配置在客L与集宿L的同|段q接时ƈ没有发生问题Q而是在跨|段q接时出现问题?/p> <p>看v来一丝小的改动居然有这么大的区别?WhyQ?/p> <p>其实是这P当客L与服务端同属一个网D늚时候,在添加\由后Q客L是可以直接访问到Docker内部的。这样一来,IP地址可以根据需要被正确地解析出来。如Qtaosnode1Q?72.19.0.41Q、taosnode2Q?72.19.0.42Q、taosnode3Q?72.19.0.43Q。在不同的IP地址下,即便端口都是一L6030QTDengineq是可以完成不同节点的区分?/p> <p>但是Q当跨网D之后就不一样了。对于不同网D늚客户端和服务端而言Q客L要通过真实路由去连接服务端Q但真实路由中ƈ没有注册我们讄的Docker内部|络Q所以客L自然p问不了Docker内部的网l。因此,当taosc需要得到集提供的不同节点的信息时QFQDN已经无法正确解析IP地址了。这时候,需要通过端口来实C同节点的区分?/p> <p>q就是不能再在Docker环境下的节点中同时?030端口的原因?/p> <p>因此Q当你用了DockerL内外一致的端口映射Q且每个节点的serverPort参数不相同的讄Ӟ集群可以通过不同的端口来区分不同的节炏V这样一来,客户端才可以拿到拓扑信息q行集群的顺利操作?/p> <p>q就是整个“案件”的最l答案?/p> <p>ȝ一下,对于用户使用而言QDocker环境下搭建TDengine Database集群的水q是颇深。由于环境的相对复杂Q所以我们也q不是十分推荐大家用这U方式搭建集。所以,关于TDengine在Docker环境的用,大家q是要小心}慎?/p> <p>最后我们想说的是,作ؓ一个开源的产品Q社区的z跃与专业是我们涛思数据最为关注的地方。虽然目前官|上q没有关于Docker环境下TDengine<a href="//www.yakult-sh.com.cn/docs/cn/v2.0/cluster" data-type="URL" data-id="//www.yakult-sh.com.cn/docs/cn/v2.0/cluster" target="_blank" rel="noreferrer noopener">集群搭徏</a>的文档。但是这些社区用户们的活跃思考显然很大程度填补了q样的一个空白?/p> <p>真心感谢OliverQfreemineQpigwing三位朋友。十分希望日后可以l看C们在物联|大数据技术前沿群中的z跃w媄Q同时我们也希望有更多的朋友们能够参与进来?/p> <p>扫描二维码,dT为好友,卛_与各位热衷开源的朋友一起在内互动哦~</p> <div id="sqinis2ngw" class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="//tdengine.com/wp-content/uploads/2021/05/image-5.png" alt="T二维? class="wp-image-2338" width="264" height="264" title="【社区精选】在Docker环境下,TDengine的客LZ么连不上集群Q?- TDengine Database 时序数据? srcset="//www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-5.png 588w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-5-150x150.png 150w, //www.yakult-sh.com.cn/wp-content/uploads/2021/05/image-5-300x300.png 300w" sizes="auto, (max-width: 264px) 100vw, 264px" /></figure></div> <p>点击?a href="//github.com/taosdata/TDengine/issues/6032" rel="nofollow noopener" target="_blank">q里</a>”,查看Oliver整理的TDengine在Docker环境下的集群搭徏W记</p> ]]></content:encoded> </item> </channel> </rss>