暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CnosDB成为首个支持sqllogictest的时序数据库,稳定性与可靠性再升级

CnosDB 2023-04-20
259


云原生时序数据库CnosDB引入了sqllogictest集成框架。通过将sqllogictest集成到CnosDB中,开发人员可以更轻松地测试和验证数据库的正确性,并能够快速地发现和解决潜在的问题。



近期,云原生时序数据库CnosDB合入新的PR,引入了Sqllogictest集成框架。通过将sqllogictest集成到CnosDB中,开发人员可以更轻松地测试和验证数据库的正确性,并能够快速地发现和解决潜在的问题。这个新的PR对于CnosDB有着重要的意义,为开发人员提供了更加高效和可靠的测试工具。CnosDB也成为首个集成sqllogictest的时序数据库,稳定性和可靠性再次升级。



关于sqllogictest




sqllogictest是一个用来验证SQL数据库引擎是否计算出正确结果的集成测试框架,它可以执行各种SQL查询,包括对基本语法、函数、操作符和数据类型的支持进行测试。sqllogictest只关心查询结果的正确性,不关注数据库的性能,索引,事务,并发,内存,磁盘。


sqllogictest的主要功能是执行SQL查询,并比较预期结果与实际结果是否一致。该框架可以测试各种SQL查询,例如SELECT语句、INSERT语句、UPDATE语句、DELETE语句、CREATE TABLE语句等等。sqllogictest还可以验证SQL引擎是否支持各种数据类型、操作符和函数,并测试不同的查询语句是否具有预期的效果。


值得注意的是,sqllogictest只关注查询结果的正确性,而不考虑数据库的性能或其他方面。这意味着它不会测试查询的执行时间、索引的使用、并发性能或内存管理等方面。因此,sqllogictest主要用于确保SQL引擎能够正确地计算结果,而不是评估数据库的整体性能。



为什么CnosDB引入sqllogictest




CnosDB技术团队一直以来都致力于为用户提供高稳定性和高可靠性的产品。为了实现这个目标,我们注重对查询引擎的逻辑测试,这是提升稳定性和可靠性的重中之重。【拓展阅读:CnosDB‍成为首个产品支持SQLancer的云原生时序数据库 】通过引入sqllogictest,CnosDB团队发现可以获得以下收益:


首先,sqllogictest可以帮助回归测试,保证CnosDB产品的稳定性。回归测试是指检验软件原有功能在修改后是否保持完整。当社区开发者更改代码后,需要尽可能地保证不引入新Bug,已经修复好的Bug不再出现。通过使用sqllogictest,CnosDB团队能够快速有效地测试修改后的代码,以确保CnosDB产品保持稳定性。


其次,sqllogictest可以帮助开发人员进行SQL语句的正确性验证,找到数据库的逻辑错误。在开发过程中,开发人员需要经常编写SQL查询语句,确保查询结果正确无误。通过使用sqllogictest,开发人员可以对SQL查询进行逻辑测试,找到潜在的错误和问题,并在早期阶段修复这些问题。


第三,sqllogictest编写集成测试非常方便,易于查看。集成测试是指测试整个系统或应用程序的各个组件是否正常工作。通过使用sqllogictest,CnosDB团队可以轻松编写集成测试,以确保CnosDB的所有组件都可以协调工作,确保产品的完整性和一致性。


第四,sqllogictest是用Rust编程语言编写的,正好与CnosDB相同,这有助于Rust语言生态的发展。Rust是一种快速、安全和可靠的编程语言,与C++和C语言,可用于编写高性能的基础架构程序。CnosDB团队使用Rust编写CnosDB的原因是,它提供了更好的性能、安全性和可靠性。【拓展阅读:CnosDB 涅槃重生:弃用Go, 全面拥抱Rust 


最后,sqllogictest是一个成熟的开源项目,可以自由使用和修改,已经有很多基于SQL的数据库或框架在使用,比如DataFusion,它的稳定性和易用性已经得到了证明。通过使用sqllogictest,CnosDB团队可以获得开源社区的支持和帮助,提高产品的质量和可靠性。



使用sqllogictest编写SQL测试


                              


下面介绍使用sqllogictest编写SQL测试的具体方法,测试文件使用.slt作为扩展名。


  1. 验证语句执行成功

    statement ok
    CREATE TABLE foo(a BIGINT, b BIGINT, TAGS(c));


    statement ok
    INSERT INTO TABLE foo(time, a, b, c) VALUES (1, 1, 1, '1'), (2, 2, 2, '2') ;


    1. 验证查询语句成功

      query T
      SELECT * FROM foo ORDER BY time;
      ----
      1970-01-01T00:00:00.000000001 1 1 1
      1970-01-01T00:00:00.000000002 2 2 2

      T 表示比对结果集的文本


      1. 验证语句执行失败

          statement error Database .* forbid drop
          DROP DATABASE public;


        其中error 后面跟着的是正则表达式,用来匹配多样的错误信息。


        这样通过简单的配置,就可以快速使用sqllogictest帮助大家检查SQL是否有逻辑错误。


        更多使用方法可以查看https://github.com/cnosdb/cnosdb/tree/main/query_server/sqllogicaltests

        https://github.com/risinglightdb/sqllogictest-rs



        结语




        以上就是CnosDB支持sqllogictest的全部内容了。对稳定性和可靠性的追求,对于CnosDB的技术团队来说永无止境。欢迎热爱数据库及数据库测试的小伙伴们关注我们微信公众号、B站视频号以及加入我们的社区,我们将及时更新最近技术动态与技术内幕,并期待与大家深入交流。



        参考文献




        https://github.com/risinglightdb/sqllogictest-rs





         参与CnosDB社区交流群:


        扫描下方二维码,加入CC进入CnosDB社区进入社区交流,CC也会在群内分享直播链接哒












        🚪由此下方【阅读原文】即可传送CnosDB GitHub开源社区🔜🎟 各位爱码士🧙♂️尽情享受开源世界吧。

        文章转载自CnosDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论