换一种思维实现数据库切换

前言

当我们提到设计数据库无缝切换的时候,经常用到的办法就是用反射,连微软自带的例子Microsoft .NET Pet Shop也是如此。虽然如此,但一方面反射性能比较低,另一方面我觉得通过字符串的方式来切 换数据库难免不合适。近两天有想到用标准+冗余的办法来实现同样的需求,目前处于理论阶段,正在实 践中,现分享出来大家一起讨论下:)

正文

一、理论:

这里例举OracleDAL和SqlServerDAL。

将OracleDAL的dll名称设置为DAL.OracleDAL.dll,将SqlServerDAL名称设置为DAL.SqlServerDAL.dll ,但是两者内部的类名、方法名以及命名空气名称完全一样。也就是说,比如class:OracleDAL有一个 Insert方法,那么就将他的类名称改成DAL,Insert名称不变(如果标示了如OracleInsert,最好改成与数 据库不相关的名称);而class:SqlServerDAL也同样将类名改成DAL,外部方法需要和OracleDAL一直。这 样一来,我们同时引用两个dll会报错,我们只能引用一个dll,也就是我们切换数据库的时候只用替换一 下dll就可以了,不必用反射来了,由此大家也能看到冗余。但是仍然可以优化,理想的情况下,可以抽 出一个中间的dll(DAL.dll)来封装两者相同的代码以及标准接口,而DAL.OracleDAL.dll和 DAL.SqlServerDAL.dll都依赖并遵循于DAL.dll,这样能规范约束并且减少冗余。

二、实施:

通过反射达到无缝切换:更改数据库连接字符串+更改表示当前数据库的配置文件(一般都是如此做法) 。

通过标准+冗余到无缝切换:更改数据库连接字符串+更换dll。

三、简单示例:

1.DAL.Oracle.dll

1.1 OracleDAL.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OracleClient;

using Model;

namespace Data
{
    //public class OracleDAL
    public class DAL
    {
        public void Insert(IModel model)
        {
            OracleCommand cmd = new OracleCommand("connectionstring");
            cmd.CommandText = "Insert into test(column1,column2) values (@column1,@column2)";
            //cmd.Parameters
            cmd.ExecuteNonQuery();
        }
    }
}

时间: 2024-12-30 16:14:48

换一种思维实现数据库切换的相关文章

Oracle数据库 DGbroker三种保护模式的切换_oracle

1.三种保护模式 – Maximum protection 在Maximum protection下, 可以保证从库和主库数据完全一样,做到zero data loss.事务同时在主从两边提交完成,才算事务完成.如果从库宕机或者网络出现问题,主从库不能通讯,主库也立即宕机.在这种方式下,具有最高的保护等级.但是这种模式对主库性能影响很大,要求高速的网络连接. – Maximum availability 在Maximum availability模式下,如果和从库的连接正常,运行方式等同Maxi

Android图表库MPAndroidChart(六)——换一种思考方式,水平条形图的实现过程

Android图表库MPAndroidChart(六)--换一种思考方式,水平条形图的实现过程 一.基本实现 我们之前实现了条形图,现在来看下水平条形图是怎么实现的,说白了就是横起来,看下效果: 说起来现在写着博客就轻松很多了,大家对MPAndroidChart的大部分流程已经很熟悉了,我们先layout里面定义它的横向View <com.github.mikephil.charting.charts.HorizontalBarChart android:id="@+id/mHorizon

一种简单的数据库性能测试方法

这两天接到一个任务,要测试一个服务器的性能,客户要求向数据库内 1000/s(每插入一千条数据)  的处理能力,当时脑子赌赛了,想的是用LR来进行,由于LR接触不深,只知道LR实现参数化的时候可以调用数据库里面的数据,往里面大批量的插入数据,以前没试过. 翻阅了一下资料,找一到了一篇<一种特殊的数据库性能测试>,大概思路是:通过编写一java程序来循环插入数据,编写一个批处理文件来调用java程序.再通过LR的system()函数来调用批处理文件来进行压力测试.但是对于我这种菜鸟来说,好多细节

win8系统两种安全模式怎样进行切换?

  win8系统与win7系统相比有很大的变化,比如说没有之前的一键就可以取得安静模式的成果,所以说想要实现这个功能就必须要到后台操作.不过这样操作起来确实是十分的麻烦,因此不少人都问有没有更好的方法呢?答案是肯定的.那么win8系统两种安全模式怎样进行切换呢?下面来看看具体的操作步骤吧. 1.一旦进入了宁静模式,那么只要不将前面的勾勾去掉,系统就会不断的进入到宁静模式. 2..打开电脑直接进入到操作系统,然后就点击Win+R组合键,在显示的输入框里面输进去msconfig等字符,接着就选择确定

“互联网+”时代应强化八种思维

"互联网+"时代,是利用信息通信技术和互联网平台,让互联网与传统行业进行深度融合,创造新的发展生态的时代.联系工作实践,笔者认为,"互联网+"时代的新闻宣传工作至少应该强化八种思维. 用户思维 "互联网+"时代最显著的特点,就是以用户为中心,突出用户的主体地位.新闻宣传应当依托互联网平台,努力为用户提供更多更有价值的服务,以此来集聚更广泛的用户,构建不同的用户群,产生裂变效应,收获更大实效.为此,要在三个方面满足用户:一是满足精神需求.为用户成长

《解读NoSQL》——2.5 比较ACID和BASE——两种可靠的数据库事务方法

2.5 比较ACID和BASE--两种可靠的数据库事务方法 兼顾性能和一致性的事务控制在分布式计算环境下是很重要的.通常会在两种事务控制模型中选择其一使用:ACID用于RDBMS,BASE用在很多NoSQL系统.即使数据库事务只有很少一部分需要事务完整性,但了解RDBMS和NoSQL系统能够采用这些事务控制策略也是很重要的.这两种模型的区别在于应用开发人员所付出的努力和事务控制所发生的位置(层级). 让我们从一个简单的银行业务案例来展现一个可靠的事务.如今,许多人都有两个银行账户:储蓄账户和支票

为了网站的排名做SEO是一种思维

摘要: 看上去,这二个句子的意思差不多.但是,这里面却包含了二个方面的内容.一个是为了SEO而SEO就是只是做SEO而已.为了网站的排名做SEO那是一种思维.下面,无用SEO就与大家来探讨这 看上去,这二个句子的意思差不多.但是,这里面却包含了二个方面的内容.一个是为了SEO而SEO就是只是做SEO而已.为了网站的排名做SEO那是一种思维.下面,无用SEO就与大家来探讨这二个话题. 第一, 为了SEO而SEO. 大家都知道SEO一般的工作就是选取关键词,站内优化和站外优化等.所以,如果是为了SE

oracle-刚学ORACLE数据库切换问题

问题描述 刚学ORACLE数据库切换问题 刚学的ORACLE,有一点不是很明白: 我的ORACLE我新建了四个数据库 A.B.C.D 当我登进SQLPLUS的时候 不清楚我到底在哪个数据库下面! 假设我是在C数据库下面,如果我要切换到A数据库或B数据库又或者是D数据库的时候 我该怎么操作! 谢谢! 解决方案 Oracle 是不需要 创建数据库的 · 而是 对应的表空间, 可以理解 一个表空间 就相当于一个数据库, 每个用户都对应一个表空间 ,,所以你只要切换用户 就可以做到你想要的切换数据库.

你的团队需要这6种思维模式

作为老板,你是否有时会感到一种脑力上的孤独感?对我来说,我需要聪明人在我周围,激发我的灵感.聪明的主意不会在独处中产生,成功的企业需要一支强有力的协作团队. 那么企业需要 什么样的聪明人呢?我发现,和跟自己的http://www.aliyun.com/zixun/aggregation/9289.html">思维模式完全不一致的人交流收获最大.许多思维迥异的人在一起,就会结出丰硕的果实.下面是我总是在团队中 寻找的6种思维模式. 1梦想模式.这种思维模式总是在想象未来和各种可能性.他们的思