简介NoSqlOnSql在SQL上实现NOSQL
目录
介绍
实现
看起来如何?
安装和示例
反馈
介绍
NoSqlOnSql基于扩展SQL数据库以支持NoSQL功能而无需任何内核更改。从这个意义上讲,它类似于诸如https://www.torodb.com或https://www.microsoft.com/zh-cn/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 SELECT查询创建SQL VIEWS。
- 实现应尽可能不打扰。由NoSqlOnSql创建的永久工件的数量减少到实现一个集合中所有文档的ONE层次表。
- 处理复杂查询时,NoSqlOnSql可能需要创建临时对象,查询完成后将丢弃这些临时对象。为避免名称冲突,所有NoSqlOnSql对象均以NOSQL_前缀开头。
- NoSqlOnSql遵循只写模式,永远不会删除或更新数据。
如果需要更改值,则会创建该值的新版本。结果如下:
- 默认情况下,仅提供值的最新版本,但是可以访问文档的更改历史记录。这使得NoSqlOnSql存储成为实现区块链的理想媒体。
- 这种方法也遵循事件存储范例:https : //en.wikipedia.org/wiki/Event_store
- 在SQL层,实现集合仅需要支持INSERT和SELECT。那就是表上的记录永远不会被修改或删除。在考虑容错(即复制)和可伸缩性(即分片)时,这提供了许多优势。
看起来如何?
NoSqlOnSql语法与SQL相似,它遵循语句、数据集和数据集操作的相同范例。所有NoSqlOnSql语句均以nosql开头。
NoSqlOnSql完全集成在SQL中,这两种类型的语句及其结果都可以混合在一起。
由于一个例子胜过千言万语,下面的例子不言而喻。此刻,不要太在意语法,只关注一般感觉以及NoSqlOnSql与SQL的混合方式。
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-SQL的NoSqlOnSql可作为.NET Framework的NuGet包提供。
Install-Package nosqlonsql -Version 1.0.1
使用它很简单,只需创建一个NoSql对象。
var nosql = new NoSql();
使用nosql查询和支持的SQL方言类型调用Transpile(“mssql”表示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),可以证明基于SQL和NoSQL文档之间的差距不是技术上的差距,而是概念上的差距。因此,它可以完全包含现有功能以及一些思考。
PoC是有效且扎实的,但是将其转变为可操作产品所需的工作并不是我愿意独自承担的。
简介NoSqlOnSql在SQL上实现NOSQL相关推荐
- SQL正在击败NoSQL,这对未来的数据意味着什么
转载自 SQL正在击败NoSQL,这对未来的数据意味着什么 经过多年的沉寂之后,今天的SQL正在复出.缘由如何? 这对数据社区有什么影响? 自从可以利用计算机做事以来,我们一直在收集的数据以指数级 ...
- 字节跳动在 Spark SQL 上的核心优化实践
作者 | 郭俊 封图 | BanburyTang 字节跳动数据仓库架构团队负责数据仓库领域架构设计,支持字节跳动几乎所有产品线(包含但不限于抖音.今日头条.西瓜视频.火山视频)数据仓库方向的需求,如 ...
- sql简介香气和sql简介_香气和SQL简介
sql简介香气和sql简介 在你开始前 关于本系列 本教程系列讲授从基本到高级SQL和基本的XQuery主题,并展示如何通过使用SQL查询或XQueries将常见的业务问题表达为数据库查询. 开发人员 ...
- 字节跳动在Spark SQL上的核心优化实践
字节跳动在Spark SQL上的核心优化实践 大数据架构 今天 以下文章来源于字节跳动技术团队 ,作者郭俊 字节跳动技术团队 字节跳动的技术实践分享 10月26日,字节跳动技术沙龙 | 大数据架构专场 ...
- 上海沙龙回顾 | 字节跳动在Spark SQL上的核心优化实践
10月26日,字节跳动技术沙龙 | 大数据架构专场 在上海字节跳动总部圆满结束.我们邀请到字节跳动数据仓库架构负责人郭俊,Kyligence 大数据研发工程师陶加涛,字节跳动存储工程师徐明敏,阿里云高 ...
- hive架构介绍、SQL引擎与NoSQL引擎的对比
hive架构介绍.SQL引擎与NoSQL引擎的对比 什么是hive? 什么是数据仓库? 数据仓库的构建过程 OLTP应用和OLAP应用 数据仓库中的数据模型 什么是hive HIVE的体系结构 hiv ...
- Linux简介及在VMware上安装第一台虚拟机
Linux简介及在VMware上安装第一台虚拟机 1 简介 1.1 Linux概念 1.2 VMware简介 1.3 XShell简介 1.4 xftp 2 Linux目录结构 3 步骤 3.1 安装 ...
- Simscape Multibody简介与入门(上) 准备工作
转载于:https://zhuanlan.zhihu.com/p/67330380 Simscape Multibody简介与入门(上) 准备工作 (一)简(fei)介( hua ) 现如今几乎各个主 ...
- RDBMS之SQL:SQL语言的各种方言的简介(MySQL/Hive SQL/PQL/OracleSQL/SQLite影响力排序)、主流语言的对比之详细攻略
RDBMS之SQL:SQL语言的各种方言的简介(MySQL/Hive SQL/PQL/OracleSQL/SQLite影响力排序).主流语言的对比之详细攻略 目录 SQL语言的各种方言的简介 1.My ...
最新文章
- 阿里面试: 说说强引用、软引用、弱引用、虚引用吧
- 改变mysql数据库用户的权限
- 【数学】礼物(jzoj 2129)
- WebClient上传文件至服务器和下载服务器文件至客户端
- php注册 绑定的容器,php – 将Eloquent模型绑定到服务容器
- css focus 选择器用于选取获得焦点的元素
- python gif图 ctf_从两道CTF实例看python格式化字符串漏洞
- python机器学习乳腺癌细胞模型
- 电感电容之开关电源的原理
- 优点家庭服务器如何修改wifi密码,家用wifi怎么改密码?
- 浅谈网络中数字签名技术
- 关于cnt++和++cnt
- 拆与组装计算机的全过程,拆装及组装电脑方法
- wincap的使用总结
- 【虫师--系列15】性能测试知多少---系统架构分析
- QNX 在车机系统中的应用
- 设计模式 — 简单工厂模式(Simple Factory)
- java后台导出pdf,基础用法和样例
- java basefont_itext 文本域 字体样式设置
- 青岛美迪康医疗科技有限公司
热门文章
- centos上升级node_在centos7安装nodejs并升级nodejs到最新版本
- android关闭系统弹窗,Android 禁止 EditText 弹出软件盘
- 彩色人物创意灵感|C4D万物皆可造!
- 国潮宫廷中国风文创包装品牌样机
- 如果不清楚设计方向,圣诞设计模板可以帮助你轻松建立节日主题。
- 极其良心的设计导航网站
- 如何查看bmp文件头_效率神器:史上最强最小文件搜索软件Everything!
- 频谱分析幅值单位_FFT分析的注意事项,您都知道吗?
- 2021年三月中旬推荐阅读文章
- likely() 和 unlikely()内建宏定义函数