将NoSQL转换为SQL

2020-10-14 01:02:02

NoSqlOnSql是SQL的严格语法超集,它为SQL语言添加了面向NoSQL文档的功能。为此,它使用类似JSON的文档,将它们集成到正常的SQL语句流中。

NoSqlOnSql基于扩展SQL数据库来支持NoSQL特性,而无需任何内核更改。从这个意义上说,它类似于其他计划,如https://www.torodb.com或https://www.microsoft.com/en-us/research/project/json-server-2/.。

然而,NoSqlOnSql的方法不同,不是在处理流程中挂钩中间件,而是在处理开始之前处理NoSQL语义。NoSqlOnSql被实现为源到源转换器:NoSqlOnSql语句被编译成由数据库正常执行的常规SQL语句。此编译可以随时进行,甚至可以在创建数据库之前开发查询期间进行。

NoSqlOnSql能够在没有任何模式定义的情况下创建、更新和查询文档。文档使用类似于JSON的表示法定义。

供应商之间的SQL实现不兼容。除此之外,符合标准的程度也相当不同。这意味着,不幸的是,NoSqlOnSql的每个实现都必须针对特定的SQL风格。NoSqlOnSql的当前实现面向Transact-SQL或T-SQL。这是Microsoft SQL Server中使用的语言。

任何有效的SQL语句都是有效的NoSqlOnSql语句。SQL和NoSqlOnSql语句可以组合使用。NoSqlOnSql被转换成等价的SQL语句。例如,可以从NoSqlOnSql选择查询创建SQL视图。

实现应该尽可能不具侵入性。NoSqlOnSql创建的永久工件的数量减少到一个实现集合中所有文档的层次结构表。

在处理复杂查询时,NoSqlOnSql可能需要创建临时对象,这些对象将在查询完成后丢弃。为避免名称冲突,所有NoSqlOnSql对象都以NOSQL_前缀开头。

如果需要更改某个值,则会创建该值的新版本。结果是:

默认情况下,只有最新版本的值可用,但可以访问文档的更改历史记录。这使得NoSqlOnSql存储成为实施区块链的完美介质。

在SQL层,实现集合只需要支持INSERT和SELECT。也就是说,表上的任何记录都不会被修改或删除。在考虑容错(即复制)和可伸缩性(即分片)时,这提供了许多优势。

NoSqlOnSql语法类似于SQL,它遵循相同的语句、数据集和数据集操作范例。所有NoSqlOnSql语句都以NoSQL开头。

NoSqlOnSql完全集成在SQL中,两种类型的语句及其结果都可以混合使用。

因为一个例子胜过千言万语,下面的例子是不言而喻的。此时此刻,不要太关注语法,只关注大体感觉以及NoSqlOnSql如何与SQL混合。

NoSQL create Springfield Override NoSQL INSERT{名称:";荷马&34;,国籍:";美国&34;,年龄:34,颜色:";绿色&34;,姓氏:";辛普森&34;,权重:90,喜欢:[';足球&39;,';甜甜圈#39;],孩子:[{名称:";巴特&34;,姓氏:";辛普森&34;,重量:38,年龄:10},{姓名:";丽莎&34;,姓氏:";辛普森";,年龄:8,点赞:[';音乐';]}}进入Springfield NoSQL插入{姓名:";MOE";,姓氏:";Szyslk&34;,职业:";调酒师";}到Springfield NoSQL SELECT?,$name,$LASTNAME,#age,$Children[0].name中,名为chi0 from Springfield_where$lastName=';Simpson';

ID|姓名|姓氏|年龄|孩子0-0 1|荷马|辛普森|34|巴特1 4|巴特|辛普森|10|2 5|丽莎|辛普森|8

使用NoSQL查询和支持的SQL方言类型调用Transpile(“MSSQL”代表MS SQL Server)。假结果表示语法错误:

代码、注释和主机回调是代码转换的结果,但我们只对代码块感兴趣,它们只是普通的SQL代码。因此,我们像往常一样执行它们:

Using(var database=new SqlConnection(ConnectionString)){for(var i=0;i<;nosql.Code.Length;i++){if(nosql.Code[i].Type==BlockType.Code){using(SqlCommand command=new SqlCommand(nosql.Code[i].value,database)){using(vars=command d.ExecuteReader())...照常处理!!}。

NoSqlOnSql未准备好投入生产。目前,这只是一个概念证明(PoC),以说明SQL和基于NoSQL文档的差距不是技术差距,而是概念差距。因此,它完全可以用现有的功能加上一些思考来涵盖。

PoC是有效的和可靠的,但将其转化为可操作的产品所需的努力不是我愿意独自涉足的。所以,如果你有兴趣扩展这篇文章,只需给我写信或写评论即可。

本文以及任何相关的源代码和文件均受代码项目开放许可证(CPOL)的许可