- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在寻找建议以及人们拥有的任何基准或观察结果。我们正在寻求重写我们的数据访问层,并试图在 native C++ OLEDB 或 ADO.NET 之间做出决定以连接数据库。目前我们专门针对 Oracle,这意味着我们将使用 Oracle OLE DB 提供程序和 ODP.NET。
要求:1. 所有应用程序都将在托管代码中,因此使用 native C++ OLEDB 将需要 C++/CLI 才能工作(没有 PInvoke 方式会减慢)。2. 应用程序将来必须与多个数据库一起工作,目前只针对Oracle。
问题:1. 使用 ADO.NET 来完成此操作或使用封装在托管 C++ 接口(interface)中以供托管代码访问的 native C++ OLE DB 会更高效吗?
如果您有任何想法、帮助或可以在网络上查看的地方,我们将不胜感激。
最佳答案
考虑到您需要的不仅仅是 Oracle 的通用解决方案,我认为不可能给出普遍适用于这种情况的单一答案。问题是一个供应商的 .NET 提供程序可能比他们的 OLE DB 提供程序更快,而另一个供应商则相反。这两种数据访问技术的架构截然不同。
不过,我的直觉是速度差异不会那么大。因为这听起来像是您将自己的数据访问层放在 OLE DB 之上,所以在您编写之前很难直接比较。但总的来说,任何数据修改语句(例如,UPDATE mytable set…)在这两种情况下可能都不会完全不同。使用这两种技术,您可以在适当的情况下指定参数数据,然后将命令发送到服务器。大部分成本可能是网络延迟和服务器执行时间。最大的区别可能会在读取数据集时发挥作用。
读取数据将是显示速度差异的因素。根据您的计划,您可能希望读取低级别的数据。例如,对于 OLE DB,您可以调用 IRowset::GetNextRows。使用 .NET,您可能会通过 DbDataReader::Read() 读取数据集。我不知道这是否典型,但在我处理的代码中,OLE DB GetNextRows() 方法比 .NET Read() 实现复杂得多。我不确定这是否一定会导致执行速度变慢……但有可能。
在我看来,最好的选择是使用 ADO.NET。由于它是 Microsoft 当前的数据访问技术,我怀疑供应商更新其 .NET 提供程序的频率将高于其 OLE DB 提供程序。因此,如果在实现中存在性能问题,.NET 提供程序可能会得到修复,而他们的 OLE DB 提供程序可能不会及时(或根本没有)得到修复。此外,如果需要,您可以使用 .NET 提供程序(例如, Entity Framework )获得更大的灵 active 。如果您希望使用 OLE DB,您将需要为 OLE DB 提供程序使用 .NET 提供程序,这是 OLE DB 之上的另一层(假设它甚至可以工作,我不知道)。
关于database - native OLE DB 和 ADO.NET 之间的速度差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2589663/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!