CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)

简介:
CYQ.Data V5版本的文本数据库,以前有过相关的介绍: 周末一起用文本数据库玩玩Code First
数据的存储,是基于json格式或xml格式的,而实现的原理,也有一篇介绍:  CYQ.Data V5文本数据库技术原理解密
前几天实现基本功能后,也写了一篇突发想支持SQL语句的冲突想法的来源:  CYQ.Data 文本数据库解析SQL语法
 
对于文本数据库的原理:简单的说,就4步:
1:存储用json或xml。
2:读取时还原为MDataTable。
3:操作时操作MDataTable实现数据行的变化。
4:保存时重新写为json或xml。
 
PS:当然还有一个CodeFirst模式时自动产生用于记录表结构的"表名.ts"文件。

文本数据库的Where语句分拆: 
原先的功能,有Select( where),这个where是支持sql语句的,简单说就是对where进行了以下分析:
string  where= " id>1 and name like '%a%' order by id desc ";
分析出where,order by ,再分析出id,name及对应的值,循环进行值判断,提取出合适的行。 
从而达到查询的功能。

现在要支持SQL,看似复杂点又提升了点,因为简单的SQL语句大体如下:
Insert into ErrorLogs(PageUrl , ErrorMessage) values( ' http://... ', ' what ''  is the ... ')
Select count(*)  from ErrorLogs...
Select *  from ErrorLogs  where ...
Select id,name  from ErrorLogs ...
Update ErrorLogs  set id= 1 and name= ' name is Mr ''  Right '
Delete From ErrorLogs  where ...
 
对于这些字符串的处理,真是很考基本功:
比如:Insert into ErrorLogs(PageUrl , ErrorMessage) values( ' http://... ', ' what ''  is (the (name))... ')
把这条语句,分拆出:
1:操作:Insert
2: 表名:ErrorLogs
3:PageUrl : " http://... "
4: ErrorMessage : " 'what'' is (the (name))... " 
 
PS:我觉的可以适当的拿来做面试题了。。。。

大体整体的实现,基本上就等同于解析上面的SQL语法,然后回归到MDataTable的原始操作上去,细节就不啰嗦重复了。
 
下面看一下实现后的效果图:
 
项目截图就省略了,页面后台的代码:
  protected  void btnExec_Click( object sender, EventArgs e)
        {
             if (! string.IsNullOrEmpty(txtSql.Text))
            {
                MProc proc =  new MProc(txtSql.Text, txtConn.Text);
                 switch (ddlExeType.SelectedValue)
                {
                     case  " 0 ":
                        labTip.Text = proc.ExeScalar< string>();
                         break;
                     case  " 1 ":
                        labTip.Text = proc.ExeNonQuery().ToString();
                         break;
                     case  " 2 ":
                        MDataTable dt = proc.ExeMDataTable();
                        rptList.DataSource = dt;
                        rptList.DataBind();
                         break;
                }
                proc.Close();
            }
        }
 
上面这段代码很简单,执行指定链接的SQL语句,然后显示相应的信息。
 
操作数据库,基本配置文件里指定日志的链接字符串是必不可少的内容:
<add name= " LogConn "  connectionString= " txt path={0}App_Data " /> 
 
说明:把系统错误日志用文件数据库记录,CYQ.Data V5内置用了CodeFirst方式来实现异常的数据库执行日志错误:
表名为ErrorLogs
4个字段分别为:
1:ID,PageUrl,ErrorMessage,CreateTime。 
 
下面我们看界面:由于我的项目里本身就有日志,我们查询一下:
 
OK,下面我们删除所有数据库,执行成功后删除了5行数据:
再添加一行数据:
 最后更新这行1行数据:
 
 最终再查询显示一次:
 
 
至此,整个基本的SQL语法解析和实现就告终了,至于什么GroupBy,多表,视图,函数之类的,就在文本数据库的能力之外了。
功能的实现自己用两个Table去For还是while去实现自己需要的逻辑。 
 
下面再补充一下ErrogLogs这个日志说明:
默认的CodeFirst,简单说就是你指定哪种数据库类型,就会自动创建相应的表结构,然后把执行SQL的错误信息写到该日志里,方便查询分析和解决。
以前,我习惯把日志的链接写成:
<add name= " LogConn " connectionString= " Conn "/> 
其实就是指向Conn(CYQ.Data默认的主数据库配置顶),这样就把日志表放到和主数据库表同一个数据库。。
结果有时候,如果主数据库挂掉,异常日志就无法记录了,所以建议是存到其它数据库。
但有了文件数据库之后,用文本来存储日志,看似是个不错的选择,而且操作也相当方便。

CodeFirst时,如果有数据(第一条数据产生时,自动根据实体产生了表结构,如果是文本,在指定的目录下出来这个)
 
当然了,除了比较标准的,是自动生成的,如果你是自己手工创建,可以新建一个表名.ts表结构,内容:
 
ID, int;
PageUrl, string;
ErrorMessage, string;
CreateTime,datetime; 
 
 
CYQ.Data V5里文本数据库,实用价值:
 
包括网站站点的广告节点显示,友情链接,一些需要经常或偶尔编辑的Key,Value值等项,存文本数据库是最方便不过了。
有效的把非主站的附加数据,存储到文本数据库,利用文本数据完全内存表机制,高效,节能,又方便。
 
 
CYQ.Data V5在文本数据库、Access、SQLite、XHtmlAction等功能,都是不需要授权可以直接使用的。





     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/1191805 ,如需转载请自行联系原作者



相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
10月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1578 152
|
10月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1096 156
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
1563 213
|
10月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
751 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
9月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
435 6
|
10月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
10月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
655 8
|
11月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
1378 8
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
796 0
|
SQL 人工智能 关系型数据库
GitHub 热门!MindsDB 破解 AI + 数据库瓶颈,究竟有什么惊艳亮点?只需 SQL 即可实现智能预测
MindsDB 是一款将 AI 能力直接注入数据库的开源工具,支持 MySQL、PostgreSQL 等多种数据库连接,通过 SQL 即可完成模型训练与预测。它提供 AutoML 引擎、LLM 集成、联邦查询等功能,简化 MLOps 流程,实现数据到智能的无缝衔接。项目在 GitHub 上已获 32.4k 星,社区活跃,适用于客户流失预警、推荐系统、情感分析等场景。开发者无需深入模型细节,即可快速构建智能解决方案。项目地址:https://github.com/mindsdb/mindsdb。
1754 0