简介NoSqlOnSql在SQL上实现NOSQL

222 篇文章 13 订阅

目录

介绍

实现

看起来如何?

安装和示例

反馈


介绍

NoSqlOnSql基于扩展SQL数据库以支持NoSQL功能而无需任何内核更改。从这个意义上讲,它类似于诸如https://www.torodb.comhttps://www.microsoft.com/zh-cn/research/project/json-server-2/等其他举措。

但是,NoSqlOnSql的方法不同,不是在处理流程中挂接中间件,而是在处理开始之前处理NoSQL语义。NoSqlOnSql被实现为源到源的编译器:NoSqlOnSql语句被编译为常规SQL语句,这些语句通常由数据库执行。该编译可以随时进行,即使在创建数据库之前查询的开发过程中也是如此。

NoSqlOnSql能够创建、更新和查询文档而无需任何架构定义。使用类似于JSON的符号定义文档。

实现

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

此外,在当前实现中已考虑以下注意事项:

  • 任何有效的SQL语句都是有效的NoSqlOnSql语句。SQLNoSqlOnSql语句可以合并。NoSqlOnSql转换为等效的SQL语句。例如,可以从NoSqlOnSql SELECT查询创建SQL VIEWS
  • 实现应尽可能不打扰。由NoSqlOnSql创建的永久工件的数量减少到实现一个集合中所有文档的ONE层次表。
  • 处理复杂查询时,NoSqlOnSql可能需要创建临时对象,查询完成后将丢弃这些临时对象。为避免名称冲突,所有NoSqlOnSql对象均以NOSQL_前缀开头。
  • NoSqlOnSql遵循只写模式,永远不会删除或更新数据。

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

  • 默认情况下,仅提供值的最新版本,但是可以访问文档的更改历史记录。这使得NoSqlOnSql存储成为实现区块链的理想媒体。
  • 这种方法也遵循事件存储范例:https : //en.wikipedia.org/wiki/Event_store
  • SQL层,实现集合仅需要支持INSERTSELECT。那就是表上的记录永远不会被修改或删除。在考虑容错(即复制)和可伸缩性(即分片)时,这提供了许多优势。

看起来如何?

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

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

由于一个例子胜过千言万语,下面的例子不言而喻。此刻,不要太在意语法,只关注一般感觉以及NoSqlOnSqlSQL的混合方式。

nosql create springfield override   
nosql insert {
    name: "Homer", 
    nationality:"US",
    age: 34, color:"green",  
    lastname:"Simpson" ,
    weight:90,
    likes:['football','doughnuts'], 
    children: [ 
              {name: "Bart",lastname:"Simpson",weight:38,age:10},
              {name:"Lisa",lastname:"Simpson",age:8,likes:['music']}
    ]
}   into springfield 
 
nosql insert { name: "Moe",lastname:"Szyslak",occupation:"bartender"}  into springfield 
       
nosql select ?,$name,$lastname,#age,$children[0].name as kid0 from springfield _
               where $Lastname='Simpson' 

返回:

    id | name  | lastname | age | kid0
    ----------------------------------
0    1 | Homer | Simpson  |  34 | Bart
1    4 | Bart  | Simpson  |  10 |
2    5 | Lisa  | Simpson  |   8 |

安装和示例

用于T-SQLNoSqlOnSql可作为.NET FrameworkNuGet包提供。

Install-Package nosqlonsql -Version 1.0.1

使用它很简单,只需创建一个NoSql对象。

var nosql = new NoSql();  

使用nosql查询和支持的SQL方言类型调用Transpilemssql表示MS SQL Server)。错误的结果表示语法错误:

if (!nosql.Transpile(nosqlquery, "mssql")) throw new Exception(nosql.Error);

代码、注释和主机回调是由于编译而生成的,但是我们只对Code块感兴趣,Code块只是常规的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 (var rs = command.ExecuteReader())
                 ...PROCESS AS USUAL !!
            }
        }
     }
}

更详细的示例可在 https://github.com/jsegarra1971/nosqlonsql/tree/master/Demo中找到

反馈

NoSqlOnSql尚未准备就绪。当前,这只是概念证明(PoC),可以证明基于SQLNoSQL文档之间的差距不是技术上的差距,而是概念上的差距。因此,它可以完全包含现有功能以及一些思考。

PoC是有效且扎实的,但是将其转变为可操作产品所需的工作并不是我愿意独自承担的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值