微信号:infoqchina

介绍:有内容的技术社区媒体

如何使用多记录类型为NoSQL类型数据提供SQL访问

2013-09-10 18:13 InfoQ

随着web访问、移动设备、报表和分析包以及其他应用的发展,数据库市场正在快速地创新。然而,数量众多的系统因为不是以关系方式来组织自己的数据,它们仍无法充分参与到这些创新中。由于无法使用关系APIs(如SQL、ODBS、JDBC、PHP、ADO.Net等)有效率地访问数据,很多系统不能有效地应用这些创新。


本文将为一个很特殊的挑战提供一个解决方案:在同一个文件中混合着不同的记录结构,并使用某个字段告知应用程序如何解释每条记录。如果你拥有现代关系数据库相关的技能,你听到这些可能会觉得很奇怪。你学到要遵循某个严格的模式,并通过将数据分离到不同的表来规范化数据。然而并不总是按照这种方式编写业务软件的。在不远的过去,曾经在操作系统级别就限制了文件句柄总数。比如,在DOS操作系统时代,文件句柄数加上stdin、stdout、stderr等最大总数为20个。


虽然对于非关系或NoSQL APIs来说,混合记录结构是适当的,因为这儿不需要模式,但开发者经常会面临要使用某个需要一个模式的技术的场合。对于某些使用SQL(或ODBC等)的软件一个一致的模式定义是必需的,比如大量的第三方报表和分析工具,包括水晶报表和Excel,以及很多web和移动设备应用。


当某个业务需要使用SQL来访问该类型数据时,它们通常借助于运行批处理程序来提取数据这样的技巧将数据转换成某个关系格式,再将它们加载进关系数据库表。这些批处理程序可能不得不彻夜运行,所以这些被导入的数据很少能保持处于最新的状态。另外一个选择就是添加一个SQL API,而这需要将每种记录结构分解到自己单独的物理文件中,这会导致对应用程序的现有代码做有风险的变更。另外一个替代方法是重写整个应用程序。很多时候,这些代码已经没有任何变更地工作了数年甚至数十年,所以代码变更影响越小越好。


为了避免这些问题,并让开发者能够将现有的、非关系数据映射成关系数据,FairCom公司的 c-treeACE数据库引入了对多记录类型(MRT)表的支持。MRT表支持为那些无法融入到单个SQL模式的数据提供了一种处理方法。MRT表是为了和最开始就是以非关系表保存的已有数据一起使用的。虽然很怀疑现在是否还有某个开发者会基于MRT表来创建一个全新的应用,但是任何与前面所说的传统应用打交道的开发者将会发现这是非常有价值的。如将前面提到的批处理程序设想为某种类型的ETL(抽取,转换,加载),则可将MRT表设想为某种类型的“虚”ETL(抽取,转换,创建一组可通过SQL实时访问的虚拟表)。FairCom的技术的魔力在于转换是即时进行的,而不用将数据拷贝到外部表格,所以数据一直是最新的。


本文在一个例子中展示了如何使用MRT表来实时地为非关系c-tree数据提供NoSQL和SQL的并发访问。其目的是为了这些应用程序开发者和应用程序管理员,他们正在为c-treeACE数据、或那些可以容易迁移到c-treeACE的应用程序提供SQL访问而寻找一个简单机制。


更多精彩内容,请阅读原文。


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 解密-神秘的 RunLoop Java最伟大的价值 被中介“群殴”的搜房网到底做了什么? 硅谷传奇 PADANS COMPARISON WITH SQL 系列 ——SELECT&WHERE