今天,我将教你如何在一个框架中快速实现数据库。 该框架通过以下两个示例简单地教你如何实现。 一种是可以直接通过SQL语句检查文件的内容,另一种是模拟Mysql查询功能,最后教你如何SQL查询Kafka数据。
使用SQL访问内存中的数据
使用SQL访问文件中的数据
数据源之间的数据访问聚合排序等。 例如,连接Mysql和Redis数据源中的数据)
如果需要自行建立数据库,数据可以是任何格式,包括textwordxmlmysqlescsv和第三方接口数据,并且只有数据。 我们希望这些数据支持SQL格式的动态增删修订。
截取标准的SQL关键字和关键字之间的字符串。 每个都封装在一起,派生出许多子类。 例如,它封装在中,现在也可以反向解析为SQL文本。
字段的名称和类型信息
完整的表格信息
所有元数据组合可以理解为一个表或一组库概念
model.json主要介绍如何将创建方法,即签出方法传达给框架。
然后,还必须定义用于定义表结构的文件。
整个项目的结构大致如下。
使用上述文件中指定的包路径创建类,实现接口,并实现和创建其中唯一的方法。
是的,接下来需要定制类。
的定制需要实现接口,但直接实现的方法太多了。 实现公式类,实现一种方法就可以了。
的逻辑是方法,用于创建表。
他扫描指定下的所有文件,将每个文件映射到对象,并最终以格式返回。 接口的其他一些方法使用这个对象。
有。 数据文件也逐个映射到一个文件。
接下来,定制的中心是定义字段的类型和名称以及如何读取文件。
首先,获取数据类型和名称,即单表结构,然后从文件头获取。 当前的文件头必须自己定义。 可以自定义,包括规则。
获取文件的数据。 获取上面的表结构字段的名称和类型后,最后一步是获取文件数据。 您需要定制类并实现接口。 而且,实现其中唯一的方法,其实本质上是读取文件,将文件每行的数据与上述检索到的内容相匹配。
到此为止有必须准备的东西。 包括库表名称字段名和字段类型。 然后,写SQL语句去查数据文件。
为一些测试创建数据文件。 例如,在上面的项目结构中创建两个csv文件和,然后创建测试类。
现在可以通过SQL语句直接查询数据了。
查询结果:
这里在测试中踩了两个洞,大家自己实验的时候可以避免。
缺省情况下,SQL语句的所有表名和类名都将转换为大写。 默认的csv文件名称为表名,因此除非自定义规则,否则文件名应为大写。
某些缺省关键字不能用作表名称。 否则,查询将失败。 例如,我刚开始决定的时候一直查不到,改成就可以了。 这与的内置关键字相同,也可以在个性化配置中进行更改。
首先,准备需要的东西。 库表名字段名和字段类型。
如果使用数据源,则我们不需要在JAVA服务中定义它们,而是直接在Mysql客户端中创建。 在这里直接为测试制作两个表,和我们的文件一样。
其实,没有必要进行上述两个步骤。 我们真正需要做的是,告诉我你的JDBC的连接信息就可以了。 在文件中也定义。
在项目中引入Mysql驱动程序包
写了测试类,这样就直接完成了所有的功能。
查询结果:
虽然在上面为文件指定了类,但是可以看到这个类的代码。
这个类是和一起写的,其实是通过调用类的方法创建的,和我们在上面定制的过程一样。
其中的类是的子类,因此还实现方法。 这一点在上述内容中也得到了实现。 我们当时正在获取表的结构表的字段类型和名称,并从csv文件头中读取文件。 (的实现是连接到Mysql服务器端并查询元数据信息,然后将这些信息封装为所需的对象格式。
这里也要注意方式的两个注意点,大小写和关键词的问题。
好的,到此为止,我基本上展示了两个简单的情况。 最后补充整个体系结构和整个SQL的执行过程。
整个过程如下。 SQL解析=SQL验证=SQL查询优化=SQL生成=执行SQL
是整个分析的中心。 例如,在图中可以看到,关键字之后的每个内容其实都是一个。
直接调用不会将SQL语句中的表名转换为大写。 以下为默认值。 其他参数可以根据需要进行设定。
SQL语句首先通过Parser,然后通过语法验证器。 请注意,Parser不会验证语法的正确性。
的检查将验证查询的表名是否存在查询的字段是否存在以及类型是否匹配。 这个过程很复杂,默认为。
例如,关系代数可提供许多内部优化器,以实现自己的优化器。
因为不包括存储层,所以它提供了用于访问外部数据存储或存储引擎的适配器机制。
官方网站上写道,将来会公开支持适配器。 那时,可以像上述集成一样方便地使用,但目前不支持。 这里提供了一种独特的实现方法,可以直接在SQL中查询Kafka的Topic数据等信息。
在这里,我们内部整合实现的能力,查询结果是OK的。
还是需要提供库表名称字段名字段类型和数据源,如上述步骤所示。
自定义分析,以前没有自定义分析,这里需要自定义分析是因为它位于需要动态分析的阈值内。
profiler是指上一个案例中介绍的大小写设置等
创建解析器,使用默认值
可以开始分析,生成,根据生成的内容进行业务相关的校验和参数分析
适配器获取数据源
执行查询可以产生我们想要的效果。
临时,以前基于文件,现在基于字符串,基于模式
设置我的表结构表名字段名字段类型等,并放置在内存中。 它还包括适配器查询的数据
获取连接,执行查询,完美!
发表评论