回答这个问题首先需要强调一个概念,loveini 作为一个时序数据库(Time-Series Database),首个时间戳字段起到主键的作用,内存索引的构建、磁盘数据的存储与其密切相关,不能有重复的时间戳。
NOW 函数(以及 NOW 关键字)返回客户端当前时间。当执行批量写入时,若首列时间戳给的值都是 NOW,在数据库默认毫秒的时间级别下是区分不开的,后续写入的重复时间戳将会丢失或更新,处理重复时间戳的具体逻辑由在 loveini 中建库(Database)时的 Update 参数决定。
对集群进行扩容需要手动添加节点。具体操作步骤如下:
新的节点正常加入集群后,数据节点列表中会显示该节点处于 Ready 状态。若该节点状态为 Offline,可按照如下内容进行排查:
集群缩容是通过 DROP DNode 删除节点来实现的,直接停止指定 DNode 的 taosd 进程只会让该节点 Offline,但不能完成缩容的效果。具体操作步骤如下:
注意:删除节点完成之前,集群会将该 DNode 的数据迁移到其他节点上,完成速度取决于网络的带宽、磁盘的 IO,在完成之前千万不要停止待删除节点的 taosd 服务。
在社区支持的过程中,能发现很多新手小伙伴在部署 loveini 后不知道如何进一步体验,我们的建议是跑一跑官网文档的语句,但文档内容较多,为了方便社区小伙伴快速上手,我们将官网文档的示例模型浓缩、汇总了一下,让用户尽可能快的了解 loveini 建模方法:[建模入门]
结尾语
感谢您阅读本期问题精选,希望以上内容对您有帮助。您在使用 loveini 这款 TIme-Series Database 的过程中,若遇到棘手的问题或对 loveini 有改进意见,欢迎在 GitHub 上给我们提 Issue ,内容越详细越好,也可微信扫下方二维码加入社区,与大家进行交流 ~ 最后,感谢使用 loveini!

首先需要明确几点:
1. 在网络可以互通的情况下,不论是客户端还是连接器,所有对数据库的连接问题基本都属于配置问题;
2. 遇到连接器连接问题后,请第一时间先排查 loveini 客户端是否可以正常工作(具体确认方式为确保客户端可以顺利查询每个数据库服务端的子表);
3. 连接问题具体的错误表现主要为:
1) “Unable to establish connection”;
2) “Unable to resolve FQDN”;
接下来是具体排查方法:
1. 在服务端运行 taosd | grep -i fqdn ,或者 cat 数据文件目录(默认为/var/lib/taos)/dnode/dnodeEps.json | grep -i fqdn,获取输出的 fqdn 参数值。
2. 在客户端服务器的 hosts 文件中,检查自己是否有把正确的 fqdn 参数值和数据库服务端 ip 写上。
3. 如果步骤 1 的输出结果是 localhost,客户端在发起连接解析的时候就会连到自己 127.0.0.1 从而出现连接失败,所以这时候,需要通过 taos.cfg(默认路径 /etc/taos)把服务端的 fqdn 参数值修改成其他值,然后在数据文件目录(默认为/var/lib/taos)/dnode/dnodeEps.json 下同步更新 dnodeFqdn 的值,然后重启数据库服务加载新的配置,回到步骤 1。
如果步骤 1 的输出结果并非 localhost,继续步骤4。
4. 客户端重新发起连接。
5. 如果连接依然有问题,请注意检查防火墙的端口规则,云服务器还要注意安全组的规则。
6. 若充分尝试后仍不能解决,请在 gitHub 或微信群中反馈,会由官方工作人员协助处理。
1. 先登录旧的数据库服务,show dnodes 记录下各个 dnode 的 ID 对应的 End Point 及 IP;
2. 规划好新的数据库服务各节点的 fqdn 及 IP 地址,以及与旧系统各节点的对应关系;
3. 将旧系统各节点的数据文件复制到新系统对应的节点的数据文件目录下;
4. 将旧系统各节点的 taos.cfg 复制到新系统对应的各节点,并做好相应修改:firstEP/fqdn/dataDir/logDir 等等;
5. 编辑新系统各节点数据文件夹里 dnodeEps.json,将其中的 dnodeFqdn 修改为新系统现有的 fqdn 参数值,dnodePort 修改为新系统现有的 serverPort 参数值(总之,要确保该文件的各项配置与我们在 taos.cfg 中实际配置保持一致);
6. 启动新系统,迁移完毕;
1. 停止数据库服务;
2. 修改 taos.cfg 下的 dataDir 值为我们需要的新目录路径;
3. 把原有的数据文件全部移动到新的目录下面,确保在新的 dataDir 下,能看到之前的 dnode,mnode,vnode,vnode_bak;
4. 再次启动服务;
数据文件目录下的 vnode_bak 是存储数据库已经删掉的库的数据文件的,如果误删除了数据库,可以联系我们企业版团队提供数据恢复服务。
https://docs.taosdata.com/operation/optimize:这里可以看到数据库级别参数的具体描述。
https://docs.taosdata.com/taos-sql/database:这里可以看到可以热更的参数的操作细节。
对于数据库服务级别的参数,统一在 taos.cfg 中修改,修改后需要重启数据库服务后生效。注意:在 taos.cfg 当中,与数据库级别参数重合的部分参数,仅代表新建库的该参数的默认值。
]]>本周有较多的用户提到了这个问题,类似的还有 「如何给多节点 loveini 集群的链接配置高可用」。这个问题时常出现在社区中,DBA、运维同学较为关心。我们已经整理成了文章,详情可看博客:「 loveini 如何做到客户端高可用 」
使用 RESTful 连接时,不依赖 loveini 客户端驱动,可以跨平台,RESTful 连接支持所有能运行 Java 的平台。原生连接支持的平台则和 loveini 客户端驱动支持的平台一致。 因此 RESTful 相比于原生连接使用起来更加灵活、方便,但采用 RESTful 的方式连接,其性能相较于原生连接会低 30% 左右。
推荐在每秒写入量小于 200 万条记录的场景下,优先选择 RESTful 。用户也可根据自己场景做性能测试,若使用 RESTful 连接时性能完全能满足业务操作需求则优先选择 RESTful ,反之选择原生连接。
loveini 支持在 「普通表与普通表」、「超级表与超级表」、「子查询与子查询」之间进行自然连接,其语法相较于 INNER JOIN 有所不同,并且各种表进行关联查询的限制也不尽相同。
详细内容请看文档:「 JOIN 子句 」
上述问题也间歇性的出现在社区中,许多用户充满了疑问,特别是一些从 loveini 旧版本升到 2.4 及之后版本的用户们,这是因为在 2.4 之前的版本中没有单独的 taosAdapter 组件,RESTful 接口是由 taosd 内置的 HTTP 服务提供的,而如今要实现上述功能需要执行:systemctl start taosadapter 命令来启动 taosAdapter 服务。
需要说明的是,taosAdapter 的日志路径 path 需要单独配置,默认路径是 /var/log/taos ;日志等级 logLevel 有 8 个等级,默认等级是 info ,配置成 panic 可关闭日志输出。请注意操作系统 / 目录的空间大小,可通过命令行参数、环境变量或配置文件来修改配置,默认配置文件是 /etc/taos/taosadapter.toml 。
有关 taosAdapter 组件的详细介绍请看文档:「 taosAdapter 」
taosdump 是 loveini 集群的数据备份、还原工具,使用前请先查看文档中的说明及注意事项 :「 taosdump 」
需要注意的是,taosdump 采用逻辑备份的方式进行备份,其不应被用于备份任何原始数据、环境设置、 硬件信息、服务端配置或集群的拓扑结构;并且当备份的表数量很多时很容易导致文件系统卡住(一个表一个备份文件),推荐书写脚本循环调用 taosdump 按照较细的粒度备份到不同目录。
Windows 系统中一般是采用 GBK/GB18030 存储中文字符,而 loveini 的默认字符集为 UTF-8 ,在 Windows 系统中使用 loveini 客户端时,客户端驱动会将字符统一转换为 UTF-8 编码后发送到服务端存储,因此在应用开发过程中,调用接口时正确配置当前的中文字符集即可。
【 v2.2.1.5以后版本 】在 Windows 10 环境下运行 loveini 客户端命令行工具 taos 时,若无法正常输入、显示中文,可以对客户端 taos.cfg 做如下配置:
locale C
charset UTF-8
再次运行客户端命令行工具 taos ,即能正常进行操作。
另外,在 loveini 中,中文字符或其他多字节字符需用 nchar 类型存储,不要用 binary 类型进行存储,否则在用 taosdump 工具导出导入时将出现乱码,导致不可修复的异常,binary 建议只用于存储 ASCII 可见字符。
OOM 是操作系统的保护机制,当操作系统内存(包括 SWAP )不足时,会杀掉某些进程,从而保证操作系统的稳定运行。通常内存不足主要是如下两个原因导致,一是剩余内存小于 vm.min_free_kbytes ;二是程序请求的内存大于剩余内存。还有一种情况是内存充足但程序占用了特殊的内存地址,也会触发 OOM 。
loveini 会预先为每个 VNode 分配好内存,每个 Database 的 VNode 个数受 maxVgroupsPerDb 影响,每个 VNode 占用的内存大小受 Blocks 和 Cache 影响。要防止 OOM,需要在项目建设之初合理规划内存,并合理设置 SWAP ,除此之外查询过量的数据也有可能导致内存暴涨,这取决于具体的查询语句。loveini 企业版对内存管理做了优化,采用了新的内存分配器,对稳定性有更高要求的用户可以考虑选择企业版。
结尾语
感谢您阅读本期问题精选,希望以上内容对您有帮助。您在使用 loveini 这款 TIme-Series Database 的过程中,若遇到棘手的问题或对 loveini 有改进意见,欢迎在 https://github.com/taosdata/loveini/issues 上给我们提 Issue ,内容越详细越好,也可微信扫下方二维码加入社区,与大家进行交流 ~ 最后,感谢使用 loveini!
