- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第⼆⼗⼀章:数据库的使⽤
第⼆⼗⼀章:数据库的使⽤
⽹上论坛、播客抓取器 (podcatchers )甚⾄备份程序通常都会使⽤数据库进⾏持久
储存。基于 SQL 的数据库⾮常常见:这种数据库具有速度快、伸缩性好、可以通过
⽹络进⾏操作等优点,它们通常会负责处理加锁和事务,有些数据库甚⾄还提供了故
障恢复 (failover )功能以提⾼应⽤程序的冗余性 (redundancy )。市⾯上的数据库有
很多不同的种类:既有 Oracle 这样⼤型的商业数据库,也有 PostgreSQL 、 MySQL 这
样的开源引擎,甚⾄还有 Sqlite 这样的可嵌⼊引擎。
因为数据库是如此的重要,所以 Haskell 也必须对数据库进⾏⽀持。本章将介绍其中
⼀个与数据库进⾏互动的 Haskell 框架,并使⽤这个框架去构建⼀个播客下载器
(podcast downloader ),本书的 23 章还会对这个博客下载器做进⼀步的扩展。
HDBC 简介
数据库引擎位于数据库栈 (stack )的最底层,引擎负责将数据实际地储存到硬盘⾥
⾯,常见的数据库引擎有 PostgreSQL 、 MySQL 和 Oracle 。
⼤多数现代 的数据库引擎都⽀持 SQL ,也即是结构 查询语⾔ (Structured Query
Language ),并将这种语⾔⽤作读取和写⼊关系式数据库的标准⽅式。不过本书并不
会提供 SQL 或者关系式数据库管理⽅⾯的教程49] 。
在拥有了⽀持 SQL 的数据库引擎之后,⽤户还需要寻找⼀种⽅法与引擎进⾏通信。
虽然每个数据库都有⾃⼰的独有协议,但是因为各个数据库处理的 SQL ⼏乎都是相
同的,所以通过为不同的协议提供不同的驱动,以此来创建⼀个通⽤的接⼜是完全可
以做到的。
Haskell 有⼏种不同的数据库框架可⽤,其中某些框架在其他框架的基础上提供了更⾼
层次的抽象,⽽本章将对 HDBC —— 也即是 Haskell DataBase Connectivity 系统进⾏
介绍。通过 HDBC ,⽤户可以在只需进⾏少量修改甚⾄⽆需进⾏修改的情况下,访问
储存在任意 SQL 数据库⾥⾯的数据 50] 。即使你并不需要更换底层的数据引擎,由多
个驱动构成的 HDBC 系统也使得你在单个接⼜上⾯有更多选择可⽤。
HSQL 是 Haskell 的另⼀个数据库抽象库,它与 HDBC 具有相似的构想。除此之外,
Haskell 还有⼀个名为 HaskellDB 的⾼层次框架,这个框架可以运⾏在 HDBC 或是
HSQL 之上,它被设计于⽤来为程序员隔离处理 SQL 时的相关细节。因为 HaskellDB
的设计⽆法处理⼀些⾮常常见的数据库访问模式,所以它并未被⼴泛引⽤。最后,
Takusen 是⼀个使⽤左折叠 (left fold )⽅式从数据库⾥⾯读取数据的框架。
安装 HDBC 和驱动
为了使⽤ HDBC 去连给定的数据库,⽤户⾄少需要⽤到两个包:⼀个包是 HDBC 的
通⽤接⼜,⽽另⼀个包则是针对给定数据库的驱动。HDBC 包和所有其他驱动都可以
通过 Hackage http://hackage .haskell .org/] 5 1]](#)获得,本章将使⽤ 1.1.3 版本的 HDBC
作为⽰例。
除了 HDBC 包之外,⽤户还需要准备数据库后端和数据库驱动。本章会使⽤ Sqlite 3
作为数据库后端,这个数据库是⼀个嵌⼊式数据库,因此它不需要独⽴的服务器,并
且也⾮常容易设置。很多操作系统本⾝就内置了 Sqlite 3 ,如果你的系统⾥⾯没有提
供这⼀数据库,那么你可以到 http://www .sqlite .org/ ⾥⾯进⾏下载。HDBC 的主页上⾯
列出了指向已有 HDBC 后端驱动的链接,针对 Sqlite 3 的驱动也可以通过 Hackage 下
载到。
如果读者打算使⽤ HDBC 去处理其他数据库,那么可以在
http://software .complete .org/hdbc/wiki/KnownDrivers 查看 HDBC 已有的驱动:上⾯展⽰
的 ODBC 绑定 (binding )基本上可以让你在任何平台 (Windows、POSIX等等)上⾯
连接任何数据库;针对 PostgreSQL 的绑定也是存在的;⽽ MySQL 同样可以通过
ODBC 绑定进⾏⽀持,具体的信息可以在 HDBC-ODBC API ⽂档
http://software .complete .org/static/hdbc-odbc/
文档评论(0)