百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

数据访问的发展历程(数据访问类中一般要实现哪几种方法)

mhr18 2024-10-11 12:48 20 浏览 0 评论

数据伴随着计算机信息技术的发展而逐渐的丰富起来,为满足科技、经济、商业各方面的需要而创建了不同的数据信息格式,技术软件的开发者往往精选最能满足需要的数据存储机制,并且从现有的厂商中选择数据库技术,或创建自己所拥有的数据格式。通常各种数据结构和格式是不兼容的。例如,公司中不同的部门采用不同的数据结构和格式,数据可能来自于oracle 、SQL Server 、Access和FoxPro等不同的数据源 。

这种情况下,要访问每一个数据源,就必须编写或安装与每一个数据源相匹配的软件。

一、API

数据访问这项工作最初是由API (应用程序编程接口)来完成的,因而它也被称为”固有的”驱动程序。当通过直接与数据源API 对话的固有驱动程序提供数据访问时,通常会出现以下几个问题:

大多数专业化的API 是用c ++编写的,并且存储在扩展名为DLL 的文件中。要执行驻存在API DLL 文件中的函数,必须使用与编写API 所用源语言相同的编程技术。

程序员必须对API 支持的程序有一定的了解,并且还要掌握其相关的具体知识。通常,这种知识相当难懂并且只与相关的产品有关。例如,某些熟悉SQL server DB API 的人员有可能不能使用这种知识访问Orade OCI 中的程序。

所以用一个数据源固有的API执行客户软件时,这个过程是复杂的、昂贵的,并且还是很消耗时间的。经验显示:大多数数据使用者没有技术能力去有效并且经济地开发相关数据源的定制访问。20世纪90年代初期就是这种状态。

二、ODBC

为解决API应用的问题,1992年微软发布了ODBC。ODBC 提供了标准的API ,可以访问各式各样的数据库。ODBC支持SQL (结构化查询语言)的使用,并把SQL 作为标准且关键的语言组件用以从各种数据源中检索数据。由干SQL 已经成为大型计算机上事实的标准,因而,ODBC 有助于把SQL 广泛应用到PC 数据库上。

ODBC 由两部分组成:

ODBC管理器:这个程序运行在所有windows操作系统的控制面板中,它包含有连接数据源时所需要的信息。ODBC 管理器为每个数据源连接创建data souoe name ,即DSN 。

ODBC 驱动程序:ODBC 驱动程序软件包含需要处理的具体数据源信息。

使用ODBC不必涉及任何具体厂商的信息就能够创建数据库应用程序,所需要的只是DSN 的名称(在ODBC 管理器中定义)和定义数据操作的SQL 声明。DSN 的名称和SQL 的声明通过DSN 传送到ODBc 驱动程序,当数据源检索到希望得到的信息时信息就会通过ODBC 返回到程序中。

ODBC 要求为具体的数据源安装相应的驱动程序。例如,要连接SQL server ,就需要为SQL server安装相应的ODBC 驱动程序。但是,一旦安装ODBC 驱动程序后,就只能用同一种编程方法对源数据库执行数据库操作。自1992 年ODBC 开始应用以来,它已经取得了非常大的成功。如今,通过ODBC 驱动程序.可以访问几乎所有重要的数据库格式。

但是,ODBC 传统上的语法是与C 语言编程紧密相联的。这种情况下,要处理单个数据查询就必须以适当的次序执行一系列的API 函数。但是,使用oDBC 进行程序设计时,往往还是感到困难和复杂因而ODBC 不能满足决速开发应用程序的需要。

三、DAO数据库对象技术

为ODBC 数据创建一个易用的接口,其中一个方案就是采用对象技术。微软在这个领域最初的成果是所谓的Data Access object ( DAO )。它是用来补充Jet Database Engine 的,而Jet Datase Engine 是包含在Access 中的。Jet Engine 的目的是为Access MDB 文件提供支持,以便把MDB 文件作为Access 和Visual Basic 的一个标准数据格式。除了对Access MDB 文件提供支持外,Jet 还可以连接到ODBC 数据源。从编程的角度来看,对日益复杂的模型最重要的就是不管数据源是什么,处理查询的指令应该是相同的。DAO与Jet的结合为数据访间提供了一种标准的方法,这种方法可以避免复杂的API 程序设计,并且仍旧可以保持与厂商的独立性。

虽然理论上DAO 与Jet的结合为开发与数据相关的应用程序提供了一种易用且易于理解的程序设计结构,但它的性能是参差不齐的。如果把Access MDB 文件作为数据源,Jet软运行良好。但是,对其他ODBC数据源的访问,如SQL Server 或oracle等,就非常难受了。原因是ODBC 要通过Jet Engine 移动数据,而Jet Engine 最初并不是专门为Sql Server或oracle客户/服务器数据库设计的。

微软虽然对DAO 系统的各个部分进行升级,以便增强客户/服务器数据库的操作。这就是RDO ( Remote Data Object) 是另一项对象技术,它面向SQL server 之类的数据库服务。但是它是通过DAO 中所谓的ODBC Direct 选项,可以把RDO 与DAO 程序设计模型连接起来。使用ODBC Direct使程序可以避开Jet Engine。所以在使用DAO 时必须要记住:对MDB 文件的访问用一种方法,而在DAO 中与SQL Server 连接时要采用另外一套不同的方法。这与最初的目的,即用一种简单并且直观的方法编写面向数据的应用程序相去甚远。

四、ADO的出现

由于Intenet飞速增长需要能够给基于Web 的应用程序提供数据的数据访问接口。以及对网络服务,如在线分析进程服务、电子邮件服务以及目录服务等非关系型数据源访问的需要,这些信息并不是以传统的关系型数据库结构存储的。如果应用程序要利用这些数据源,就必须突破DAO只能处理关系型数据的限制。

上述列出的所有问题都可通过ADO ( ActiveX Data object )来解决。ADO 对象库提供了一种单一并且统一的程序设计工具,这种工具既可访问传统关系型数据库中的数据,也可访问存储在非关系系统中的数据。

对于 ADO来说,理想的环境是每个数据源都具有一个 OLEDB 接口,这样 ADO 便可以直接调用到数据源中。虽然越来越多的数据库厂商实现了 OLEDB 接口,但某些数据源仍无法以这种方式提供。可是,目前所用的所有数据库系统实际上都可以通过 ODBC 进行访问。

ODBC 驱动程序对于目前所使用的各种主要数据库管理系统都有效,包括 Microsoft SQL Server、Microsoft Access(Microsoft Jet 数据库引擎)和 Microsoft FoxPro 以及 oracle 等非 Microsoft 数据库产品。但是,Microsoft ODBC Provider 允许 ADO 连接到任何 ODBC 数据源。

为了实现与以前技术的兼容,ADO 同时支持Jet 数据库引擎和ODBC 数据库。所以在Access连接使用SQL Server 时,既可以通过ADO 直接与SQL Server 相连接,也可以间接地用ADO 与ODBC 相连接。

由于ADO提供了一种单一的与连接数据源的方法,因而大大简化了程序设计接口,同时ADO也提高了连接数据源的速度。

在ODBC中,特殊的软件-ODBC驱动程序负责反应用程序与具体的数据源连接起来。ADO技术也需要厂商特定的驱动程序,ADO的驱动程序是在一个新标准下构造的,就是对象链接与嵌入数据OLEDB(Obiect Linking and Embedding Database)。OLEDB与ADO结合成为一个万能的数据访问系统。

ADO 之所以具有强大的功能和灵活性,是因为它可以连接几种不同的数据提供者,同时仍使用同一个编程模型,而不考虑给定提供者的特定功能。但是,因为每个数据提供者都有各自的特性,所以应用程序与 ADO 的相互作用方式将根据数据提供者的不同而稍有变化。

OLEDB提供者与服务:

OLEDB提供者分为两类:提供数据的提供者和提供服务的提供者。

“数据提供者”拥有自己的数据,并将数据以表格格式显露给应用程序。

“服务提供者”通过产生和消费数据来封装服务,以增加 ADO 应用程序中的功能。也可以将服务提供者进一步定义为“服务组件”,服务组件必须与其他服务提供者或组件结合使用。

提供者是给使用者提供数据的。ADO允许提供者提供的数据,可以是基于文件的,也可以是基于服务的。

基于文件的提供者允许访问本地驱动器或网络上的特定文件中的数据,但必须知道数据源文件准确的物理位置,例如:D:\TEST\TEST.MDB或\\COMPUTER\TEST\TEST.MDB

基于服务的提供者在网络上是作为服务运行的,在访问网络服务的时候,并不需要知道特定文件的物理位置,只需使用一个标识服务的网络名称就可以了,当试图与服务连接时,网络会使用各种协议去查找正在运行的被命名服务的计算机。基于服务提供者可以避免驱动器和路径所造成的混乱。

OLEDB是一个系统级的软件,OLEDB的目的就是为统一数据格式要求具体厂商的详细资料提供一个框架。在这个框架中,具体厂商的部分称为”提供者”(provide)。OLEDB提供者所起的作用与ODBC驱动程序相似。也就是说提供者是给使用者提供数据的。OLEDB所能处理的不仅仅是ODBC直接支持的数据库,还提供数据库服务。

ADO是应用级的软件,在开发使用数据库资源的应用程序时,可以用ADO与数据源进行通信,使用OLEDB数据资源的软件称为使用者。

ADO可以直接访问数据资源,也可以用OLEDB服务间接访问数据源。

由于ADO很大的灵活性,Access可以利用ADO实现与Sql Server的链接,这样可根据用户对数据的需要,Access能够查询本地的Access表和Sql Server的表。

相关推荐

订单超时自动取消业务的 N 种实现方案,从原理到落地全解析

在分布式系统架构中,订单超时自动取消机制是保障业务一致性的关键组件。某电商平台曾因超时处理机制缺陷导致日均3000+订单库存锁定异常,直接损失超50万元/天。本文将从技术原理、实现细节、...

使用Spring Boot 3开发时,如何选择合适的分布式技术?

作为互联网大厂的后端开发人员,当你满怀期待地用上SpringBoot3,准备在项目中大显身手时,却发现一个棘手的问题摆在面前:面对众多分布式技术,究竟该如何选择,才能让SpringBoot...

数据库内存爆满怎么办?99%的程序员都踩过这个坑!

你的数据库是不是又双叒叕内存爆满了?!服务器监控一片红色警告,老板在群里@所有人,运维同事的电话打爆了手机...这种场景是不是特别熟悉?别慌!作为一个在数据库优化这条路上摸爬滚打了10年的老司机,今天...

springboot利用Redisson 实现缓存与数据库双写不一致问题

使用了Redisson来操作Redis分布式锁,主要功能是从缓存和数据库中获取商品信息,以下是针对并发时更新缓存和数据库带来不一致问题的解决方案1.基于读写锁和删除缓存策略在并发更新场景下,...

外贸独立站数据库炸了?对象缓存让你起死回生

上周黑五,一个客户眼睁睁看着服务器CPU飙到100%——每次页面加载要查87次数据库。这让我想起2024年Pantheon的测试:Redis缓存能把WooCommerce查询速度提升20倍。跨境电商最...

手把手教你在 Spring Boot3 里纯编码实现自定义分布式锁

为什么要自己实现分布式锁?你是不是早就受够了引入各种第三方依赖时的繁琐?尤其是分布式锁这块,每次集成Redisson或者Zookeeper,都得额外维护一堆配置,有时候还会因为版本兼容问题头疼半...

如何设计一个支持百万级实时数据推送的WebSocket集群架构?

面试解答:要设计一个支持百万级实时数据推送的WebSocket集群架构,需从**连接管理、负载均衡、水平扩展、容灾恢复**四个维度切入:连接层设计-**长连接优化**:采用Netty或Und...

Redis数据结构总结——面试最常问到的知识点

Redis作为主流的nosql存储,面试时经常会问到。其主要场景是用作缓存,分布式锁,分布式session,消息队列,发布订阅等等。其存储结构主要有String,List,Set,Hash,Sort...

skynet服务的缺陷 lua死循环

服务端高级架构—云风的skynet这边有一个关于云风skynet的视频推荐给大家观看点击就可以观看了!skynet是一套多人在线游戏的轻量级服务端框架,使用C+Lua开发。skynet的显著优点是,...

七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得

前言我觉得有一个能够找一份大厂的offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司...

mysql mogodb es redis数据库之间的区别

1.MySQL应用场景概念:关系型数据库,基于关系模型,使用表和行存储数据。优点:支持ACID事务,数据具有很高的一致性和完整性。缺点:垂直扩展能力有限,需要分库分表等方式扩展。对于复杂的查询和大量的...

redis,memcached,nginx网络组件

1.理解阻塞io,非阻塞io,同步io,异步io的区别2.理解BIO和AIO的区别io多路复用只负责io检测,不负责io操作阻塞io中的write,能写多少是多少,只要写成功就返回,譬如准备写500字...

SpringBoot+Vue+Redis实现验证码功能

一个小时只允许发三次验证码。一次验证码有效期二分钟。SpringBoot整合Redis...

AWS MemoryDB 可观测最佳实践

AWSMemoryDB介绍AmazonMemoryDB是一种完全托管的、内存中数据存储服务,专为需要极低延迟和高吞吐量的应用程序而设计。它与Redis和Memcached相似,但具有更...

从0构建大型AI推荐系统:实时化引擎从工具到生态的演进

在AI浪潮席卷各行各业的今天,推荐系统正从幕后走向前台,成为用户体验的核心驱动力。本文将带你深入探索一个大型AI推荐系统从零起步的全过程,揭示实时化引擎如何从单一工具演进为复杂生态的关键路径。无论你是...

取消回复欢迎 发表评论: