精华内容
下载资源
问答
  • 数据库中的锁机制数据库中的锁机制小问题:基于上述规则,2个事务并发访问时,是否会出现死锁的情况?...2. 2个事务并发访问同一张表,1个查询,1个更新,是否有必要互斥,看具体应用场景 例子1:共享单车站...

    数据库中的锁机制

    数据库中的锁机制是默认在内部运行的机制。使用者是了解这一机制,更好的支持后续的操作。

    从效率的角度考虑:

    1. 2个事务并发访问同一张表,2个都做查询,没必要互斥
    2. 2个事务并发访问同一张表,1个查询,1个更新,是否有必要互斥,看具体应用场景
    
    	例子1:共享单车站点可用车查询-没必要互斥
    	例子2:秒杀-有必要互斥
    
    3. 2个事务并发访问同一张表,2个都执行更新操作,有必要互斥的
    

    数据库的设计者设计了两种锁+不加锁的操作,来实现上述场景的效率和安全的保证。

    不加锁的操作:和任何的锁都不互斥
    共享锁(读锁):所有加共享锁的操作彼此之间不互斥
    排他锁(写锁):和所有的加锁操作有互斥
    
    非Serlizable级别:查询不加任何锁
    Serlizable级别:查询加共享锁
    所有的级别下:更新(增删改)加排他锁
    
    A(非Ser)		B(非Ser)		是否互斥		原因
    读			读			不互斥		A和B都不加锁
    读			写			不互斥		A不加锁 B排他锁
    写			读			不互斥		A排他锁 B不加锁
    写			写			互斥			A排他锁 B排他锁
    
    A(Ser)		B(非Ser)		是否互斥		原因
    读			读			不互斥		A共享锁 B不加锁
    写			读			不互斥		A排他锁 B不加锁
    读			写			互斥			A共享锁 B排他锁
    写			写			互斥			A排他锁 B排他锁
    
    A(Ser)		B(Ser)		是否互斥		原因
    读			读			不互斥		A共享锁 B共享锁
    写			读			互斥			A排他锁 B共享锁
    读			写			互斥			A共享锁 B排他锁
    写			写			互斥			A排他锁 B排他锁
    

    在这里插入图片描述

    小问题:基于上述规则,2个事务并发访问时,是否会出现死锁的情况?

    在这里插入图片描述

    更新丢失

    并发的2个事务基于同一个查询结果对数据库进行更新操作,后提交的事务忽略了先提交的事务对数据库造成的影响,因此造成的问题称为“更新丢失”。

    更新丢失的解决方案:

    数据库如果使用Serializable级别,可以天然防止更新丢失,但是对业务的执行效率会有较大的影响。

    悲观锁解决方案:悲观锁悲观的认为,查询就可能造成更新丢失。因此,在查询时手动添加共享锁或者排他锁(推荐),以此解决更新丢失的问题。

    乐观锁解决方案:乐观锁乐观的认为,查询不会造成更新丢失,所以在查询环节不做控制。会在更新环节,验证自己查询到的结果是否依旧有效。

    1. 乐观锁解决方案需要一个第三方标识的支持,可以是第三方数据版本id,或者是最后一次操作的时间戳等
    2. 乐观锁在执行查询时,会同时查询对应的版本id或时间戳
    3. 在更新时,会先验证之前查询到的版本id或时间戳是否依旧有效
    4. 如果有效,则继续执行更新操作,如果无效,则重新执行最初的查询操作。

    悲观锁和乐观锁的利弊:

    1. 悲观锁实现方案简单,但是在查询阶段加排他锁会影响并发查询的效率
    2. 乐观锁不会影响并发查询的效率,但是在更新阶段需要重新验证,并且失败后需要不断重试
    3. 如果当前业务的查询多,更新少,优先使用乐观锁
    4. 如果当前业务的查询少,更新多,优先使用悲观锁

    在这里插入图片描述

    提问:

    更新菜单信息的时候,在页面上选择了一个父菜单,在业务层更新方法中,是否需要先验证一下parentId是否存在?

    在这里插入图片描述

    展开全文
  • 那么关于文件的事务操作是否有成熟的解决方案了,这点在前几年还真没办法,但是最近微软已经发布了关于事务性NTFS系统。都了解NTFS文件系统的优势和好处,比起FAT和其他的什么HPFS文件系统有极大的改进,所以文件...

    [王清培版权所有]

    从数据库到自定义资源管理器都能参与到事务处理中来,在必要的时候保证数据的完整性,那么我们缺一个类型的资源操作,当然您也许早就想问了,关于文件系统的事务操作怎么办?那么关于文件的事务操作是否有成熟的解决方案了,这点在前几年还真没办法,但是最近微软已经发布了关于事务性NTFS系统。都了解NTFS文件系统的优势和好处,比起FAT和其他的什么HPFS文件系统有极大的改进,所以文件事务处理仅支持NTFS格式的文件系统。

    事务性NTFS也称做TXF,只有最新的Windows系统才支持(WindowsVista\Windows7\WindowsServer2008\WindowsServer2008R2),所以在XP上就别测试了。[王清培版权所有,转载请给出署名]

    在前几篇文章中都是使用的LTM本地事务管理器,然后进行事务范围类的多个持久资源登记自动事务提升为DTC类型的事务操作,由于DTC是非托管的实现,所以在分布式事务操作中会存在数据封送的性能损耗,MSDN也提倡尽量少用DTC处理,由于存在着很多不确定因素在遇到问题时比较棘手。但是在关键的时候还是需要这么用的,我们有必要去研究研究。

    KTMDTCLTM三者的使用关系简单介绍

    以前的理解思路和讲解的角度对于KTM来说是没多大关系的,但是由于他的出现我们有必要回归到原点进行重新的梳理来进行一个更加系统深入的理解,仅仅是理解;

    在查询了大量的MSDN文档和对System.Transaction命名空间的仔细翻阅发现微软隐藏了很多.NET事务实现细节,比如System.Transaction.Oletx命名空间下的具体分布式协议的实现是没有任何技术文档看的,只能反编译自己看代码琢磨。

    我们从LTM进行梳理,LTM是本地事务管理器那么他的存在只能在当前的托管AppDomain中,不能够夸远程处理,一旦跨远程处理负责传播的对象就要实现对本地事务的提升功能,包括WCF中的一系列的banding元素和事务感知型代码,都必须对事务进行管理,但是大部分的代码都是系统提供的。[王清培版权所有,转载请给出署名]

    反编译看了部分代码,其中都会涉及到P\Invoke和COM\Interop之类的代码,凭自己的理解它的目的是启动IDTCTransaction接口,也就是COM接口。理解这一点对于我们下面的KTM操作非常有利。LTM要想进行DTC管理就必须通过OLE32.DLL进行COM接口的加载也就是我们托管的.NET类库里面的IDTCTransaction接口,看一下代码:

    //  Describes a DTC transaction.
        [Guid("0fb15084-af41-11ce-bd2b-204c4f4f5020")]
        [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        public interface IDtcTransaction

     

    该接口是向COM公开时的类型,用作于COM互操作使用的,需要通过该接口进行DTC的提升使用;为了验证理解是否正确我们来进行一个简单的测试,我们手动的通过System.Transaction.TransactionInterop类来获取非托管的IDTCTransaction接口,请看代码:

    LTM事务:

    public static void StartCopy()
      {
         using (TransactionScope transcope = new TransactionScope())
           {
               transcope.Complete();
            }
       }

     

    这样的代码是不会提升为DTC管理的,我们加一行代码:

    public static void StartCopy()
    {
         using (TransactionScope transcope = new TransactionScope())
         {
            IDtcTransaction idtc = TransactionInterop.GetDtcTransaction(Transaction.Current);
             transcope.Complete();
           }
      }

     

    先解释一下TransactionInterop类的作用,来自MSDN的说明:

    “促进System.Transactions 和以前编写的用于与 MSDTC、COM+ 或 System.EnterpriseServices 进行交互的组件之间的交互。无法继承此类。”

    其实该类主要用来对早期的分布式事务技术进行互操作,比如用来获取DTC相关的COM对象或者用来进行自定义的事务传播,对于复杂的Oletx(Windows平台的二进制通讯协议)协议,我们不需要关心太多核心的东西就能进行分布式事务的传递,这里可能Remoting有这个需求了。[王清培版权所有,转载请给出署名]

    利用TransactionInterop.GetDtcTransaction方法确实能获取到DTC事务接口。

    图1:

    有了TransactionInterop类,我们后面的扩展就方便多了。

    由于KTM是属于非托管实现,操作系统提供了文件操作的事务性API方法:

    非事务处理 API

    事务处理 API

    CreateFile

    CreateFileTransacted

    CopyFileEx

    CopyFileTransacted

    MoveFileWithProgress

    MoveFileTransacted

    DeleteFile

    DeleteFileTransacted

    CreateHardLink

    CreateHardLinkTransacted

    CreateSymbolicLink

    CreateSymbolicLinkTransacted

    CreateDirectoryEx

    CreateDirectoryTransacted

    RemoveDirectory

    RemoveDirectoryTransacted

     通过封装这些方法就能够实现事务性的文件操作,目前.NET没有封装成熟的类库给我们使用,估计在后期的新版本类库中可能会提供。

    那么我们如何使用KTM事务处理呢,很幸运的是通过MSND的连接我们能够获取到微软的事务开发人员编写的源码,下载地址为:

    http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/TxF2007_07.exe

     源码都是通过对上面的API进行封装的,里面涉及到了很多关于内部API和COM之间的通讯细节,我们可以看看老外写的代码是复杂,也是我们学习的榜样。

     上面我们说过只要夸当前应用程序域的事务处理就会自动提升为DTC事务,对于API的调用已经是出于互操作类型的,当前已经出于远程调用,DTC已经具有与托管域的交互实现,所以我们只有通过DTC进入KTM进行操作。这也是MSDN官方的解释。

    图2:

    我们来看一个简单的例子,该例子实现对文件的事务性删除操作。

    例子1:

    public static void StartDelete()
            {
                try
                {
                    using (TransactionScope transcope = new TransactionScope())
                    {
                        Console.WriteLine("输入要删除的文件");
                        string path = Console.ReadLine();
                        Microsoft.KtmIntegration.TransactedFile.Delete(path);
                        Console.WriteLine("是否提交事务处理?");
                        if (Console.ReadLine() == "y")
                            transcope.Complete();
                        else
                            Transaction.Current.Rollback();
                    }
                }
                catch (Exception err) { Console.WriteLine(err); }

     

    我简单的写了一段测试代码,经过测试是OK的。KTM能很好的结合DTC、LTM进行混合的事务处理,对于我们上面引入的疑问现在能完美的解决了。 

    参考文章:http://msdn.microsoft.com/zh-cn/magazine/cc163388.aspx

    转载于:https://www.cnblogs.com/leeolevis/archive/2012/12/05/2803199.html

    展开全文
  • 5.4 简单的Oracle数据库事务 153 5.5 提交和回滚 154 5.5.1 提交一个事务 154 5.5.2 回滚一个事务 155 5.6 数据一致性和数据并发性 155 5.6.1 数据库写入器和写前协议 155 5.6.2 SCN 156 5.6.3 撤销...
  • 在Oracle公司,Kyte专门负责Oracle数据库,他的任务是帮助使用Oracle数据库的客户,并与他们共同设计和构建系统,或者对系统进行重构和调优。在进入Oracle公司之前,Kyte是一名系统集成人员,主要为美国军方和政府...
  • 10g数据库体系结构的权威图书,涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体的例子来充分介绍每个特性,不仅...
  • 在项目中需要这样的一个“任务调度”功能,JAVA、Spring环境: 1、通过API下达“任务”,这个任务将异步执行,可以立即执行也可以设定延迟时间 ...如果不是,是否有其它有关“任务调度”的框架?
  • 语法格式属性标签如下属性:属性描述是否必要默认值dataSource所使用数据库(覆盖默认值)否默认数据库isolation事务隔离等级 (READ_COMMITTED,,READ_UNCOMMITTED, REPEATABLE_READ或 SERIALIZABLE...

    标签

    标签用来将标签和标签封装至事务中。可以将大量的和操作装入中,使它们成为单一的事务。

    它确保对数据库的修改不是被提交就是被回滚。

    语法格式

    属性

    标签有如下属性:

    属性

    描述

    是否必要

    默认值

    dataSource

    所使用的数据库(覆盖默认值)

    默认数据库

    isolation

    事务隔离等级 (READ_COMMITTED,,READ_UNCOMMITTED, REPEATABLE_READ或 SERIALIZABLE)

    数据库默认

    实例演示

    首先,需要在TEST数据库中建一个Employees表,然后往表中添加几条记录,具体操作步骤如下:

    步骤1:

    打开CMD,将目录转至安装目录下:

    C:\>

    C:\>cd Program Files\MySQL\bin

    C:\Program Files\MySQL\bin>

    步骤2:

    登陆数据库:

    C:\Program Files\MySQL\bin>mysql -u root -p

    Enter password: ********

    mysql>

    步骤3:

    在 TEST 数据库中建立 Students 表:

    mysql> use TEST;

    mysql> create table Students

    (

    id int not null,

    first varchar (255),

    last varchar (255),

    dob date

    );

    Query OK, 0 rows affected (0.08 sec)

    mysql>

    创建数据记录:

    最后,在 Students 表中创建几条记录:

    mysql> INSERT INTO Students

    VALUES (100, 'Zara', 'Ali', '2002/05/16');

    Query OK, 1 row affected (0.05 sec)

    mysql> INSERT INTO Students

    VALUES (101, 'Mahnaz', 'Fatma', '1978/11/28');

    Query OK, 1 row affected (0.00 sec)

    mysql> INSERT INTO Students

    VALUES (102, 'Zaid', 'Khan', '1980/10/10');

    Query OK, 1 row affected (0.00 sec)

    mysql> INSERT INTO Students

    VALUES (103, 'Sumit', 'Mittal', '1971/05/08');

    Query OK, 1 row affected (0.00 sec)

    mysql>

    现在编写JSP文件,使用和来执行SQL UPDATE语句。在中的代码不是执行完,就是一个都不执行:

    pageEncoding="UTF-8"%>

    JSTL sql:transaction Tag

    url="jdbc:mysql://localhost/TEST"

    user="root" password="cohondob"/>

    Date DoB = new Date("2001/12/16");

    int studentId = 100;

    %>

    UPDATE Students SET last = 'Ali' WHERE Id = 102

    UPDATE Students SET last = 'Shah' WHERE Id = 103

    INSERT INTO Students

    VALUES (104,'Nuha', 'Ali', '2010/05/26');

    SELECT * from Students;

    Emp IDFirst NameLast NameDoB

    运行结果如下:

    ec325f6fd44c3b535a74a759e66d7ee1.png

    展开全文
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    5.2.2 使用SELECT(必要元素)指定列 73 5.2.3 使用WHERE子句指定行 74 5.2.4 使用ORDER BY子句 79 5.2.5 使用DISTINCT检索唯一的表列值 80 5.2.6 使用算术运算符 81 5.3 基本函数的使用 82 5.3.1 字符函数 82 5.3.2 ...
  • 1.7.2 使用数据库和内核 23 1.8 Oracle备份与恢复入门 25 1.8.1 逻辑备份与恢复 25 1.8.2 Oracle物理备份与恢复 25 1.8.3 备份其他Oracle组件 30 1.9 小结 31 第2章 RMAN体系结构概述 33 2.1 服务器管理恢复...
  • 1 感觉自己写的程序根本没必要使用表示层+业务层+DAO层,通常一个业务层只有一个调用DAO层的语句就完成工作。  到底在什么规模的软件时适合使用三层构架。  2 数据库事务到底是放在业务层还是...
  • 锁、页类型

    2017-01-29 22:10:00
    锁模式决定锁的互斥类别,锁粒度决定锁的影响范围,事务隔离级别决定是否在读数据的时候使用锁、读锁的持续时间、读已经被排它锁定资源时的行为(等待锁释放,读没有提交的数据,读最后提交的版本)。在生产环境中你...

        SqlServer通过普通锁来保护数据库的内容(内容),通过闩锁保护内存的数据结构(缓冲区)。锁冲突会产生等待,在高并发或长作业时会严重影响性能。因此有必要了解锁的相关知识,减少锁冲突。锁模式决定锁的互斥类别,锁粒度决定锁的影响范围,事务隔离级别决定是否在读数据的时候使用锁、读锁的持续时间、读已经被排它锁定资源时的行为(等待锁释放,读没有提交的数据,读最后提交的版本)。在生产环境中你可能会遇到锁升级、闩锁等待时间过长等锁相关问题。

    锁模式

    共享锁:不会进行改变内容的操作,其他用户允许读取。

    排它锁:不允许其他用户在资源上创建任何形式的新锁。

    更新锁:更新锁是共享锁和排他锁的混合。

    意向锁:假如你锁定了某一行,那么同时也加了表的意向锁。意向锁可改进性能,因为SqlServer只需要在表层次上检查意向锁,而不需要检查表上的每个行锁或者页锁。防止其他事务以会使较低级别的锁无效的方式修改较高级别资源。 提高数据库引擎在较高的粒度级别检测锁冲突的效率。

    架构锁:架构稳定锁用来防止模式修改,架构修改锁防止修改期间

    大容量更新锁:大容量更新锁允许进程将数据并发地大容量复制到同一张表,同时防止其它不进行大容量复制数据的进程访问该表。

    锁粒度

    行、页、区、分区表、表、文件、数据库

    事务隔离级别

    Read Committed(已提交读):等待锁释放。读操作完之后立即释放锁。 SqlServer的默认隔离级别。

    Read UnCommitted(未提交读):在读数据时不会检查或使用任何锁。

    Repeatable Read(可重复读):等待锁释放。保持共享锁直到事务结束。只在读取页的期间内控制共享锁

    Serializable(可序列化):不仅会锁定受影响的数据,还会锁定查询锁定的范围。(阻止了新数据插入查询范围)

    SnapShot(快照):会读取最后提交的版本,不会被锁定

          注:无论定义什么隔离级别,对数据的更改总是通过排他锁来锁定并直到事务结束时才释放。

                默认情况每个sql语句都是一个事务。

                被GO语句隔开的所有SQL语句会编译成一个执行计划并发送到服务器,与任何其他批处理无关,一个批处理中的错误不会阻止另一个批处理运行。

    锁升级问题

            锁升级非常重要,因为它可以帮助SqlServer节约内存空间。锁升级只是“尝试”进行的,如果存在不兼容性的锁就不会进行升级。在SqlServer里当你请求的行数超过5000(Insert,Update,Delete)就会发生锁升级,产生一个排它表锁。这时默认情况下(非未提交读),所有与该表相关的读操作将被挂起。

            对于批量更新操作(Insert,Update,Delete)为了避免锁升级,可以分批去执行语句(每次影响行数<5000)。对于分区表默认是直接升级到表(LOCK_ESCALATION=TABLE),要想升级到分区表需设置表模式为自动(ALTER TABLE [TableName] SET (LOCK_ESCALATION=AUTO))。对于历史分区的分区表锁不会影响最新分区的操作。

    闩锁等待时间过长问题

            闩锁是为了保护内存的数据结构(缓冲区),比如为了防止多个线程同时写一个数据页会在写之前加上闩锁。

           SqlServer创建和删除临时表时会有空间的分配和回收,这时会修改数据分配页的标识。高并发环境下频繁修改数据分配页会导致长时间的闩锁阻塞(Buffer Latch),影响并发性能。可以为tempdb指定多个数据文件将分配页的修改压力分摊到多个文件上(文件个数=CPU的核心数)。       

    闩锁

    闩锁类型:

    • Buffer Latch:当工作线程访问缓冲池中的某个页之前,必须要先获得此页的Latch。等待类型表现为PAGELATCH_*。
    • I/O Latch:当工作线程请求访问的页未在缓冲池时,就会发一个异步I/O从存储系统将对应的页加载到缓冲池中。等待类型表现为PAGEIOLATCH_*。
    • Non-Buffer Latch:保护缓冲池页之外的内部内存结构时使用。等待类型表现为LATCH_XX。

    闩锁模式:

    • KP-Keep Latch: 保证引用的结构不能被破坏
    • SH-Shared Latch:读数据页时需要
    • UP-Update Latch:更改数据页时需要
    • EX-Exclusive Latch:写数据页时需要
    • DT-Destroy Latch:在破坏引用的数据结构时需要

    页类型

    •  Data Page:堆表和聚集索引的叶子节点数据
    •  Index Page:聚集索引的非叶子节点和非聚集索引的所有索引记录
    •  GAM Page:全局分配映射页面,记录了哪些区已经并用作何种用途
    •  SGAM Page:共享全局分配映射页面,记录了哪些区当前当前被用作混合类型的区。
    •  IAM Page:有关每个分配单元中表或索引所使用的区信息
    •  PFS Page:有关页分配和页的可用空间的信息 

    参考

    锁类型

    http://www.cnblogs.com/kissdodog/p/3170036.html

    事务隔离级别

    http://www.cnblogs.com/qanholas/archive/2012/01/02/2310164.html

    锁升级

    http://www.cnblogs.com/woodytu/p/5488602.html

    闩锁

    http://www.cnblogs.com/Joe-T/p/4826677.html

     

    转载于:https://www.cnblogs.com/ciwen91/p/6245930.html

    展开全文
  •  对于第二个问题,像是比第一个具体一些,因为帖子作者已经提供了一个性能数据报告,但我仍然觉得通过这些数据没有办法准确地判断数据库是否有性能问题。比如你是一个医生,我让一个人站在你的面前测心率,结果是50...
  • 这里建议应用跑起来之后,先自己试试手(可看后面介绍Demo如何使用的章节),看看如何跑一个流程、整个流程是怎么流的、并随时关注数据库表里的数据的变化等,对以后的学习很帮助! 2.2. 核心组件介绍 2.2.1. ...
  • Transact-SQL 权威指南--详细书签版

    热门讨论 2013-02-04 13:25:19
    3.5 必要使用NULL 75 第4章 深入DDL 77 4.1 CREATETABLE 77 4.2 删除对象 81 4.3 创建索引 81 4.4 临时对象 82 4.5 对象命名及相关性 84 4.6 小结 86 第5章 深入DML 87 5.1 INSERT 87 5.2 UPDATE 96 5.3...
  • wireless.zip

    2020-06-03 15:07:52
    >异步:非必要的业务逻辑以异步方式进行,加快速度 >削峰:不直接访问数据库 - 消息队列的缺点 >系统可用性降低:消息队列可能会挂掉 >系统复杂性增加:加入了消息队列,要考虑一致性问题,如何保证消息不被重复消费...
  • 我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...
  • 这个过程虽然不能说寝食难安,但其中的酸甜苦辣也是如人饮水,冷暖自知,如果一开始就知道要投入这么大精力,我真怀疑自己是否有勇气开始动笔。.  回顾自己学习RAC的经历,我对它又爱又恨。因为对技术本身的痴迷...
  • Microsoft SQL Server 2005 Express Edition SP3

    热门讨论 2012-03-04 10:55:14
    有必要,请修改 \Perflib 项中 Last Counter 和 Last Help 的值。在右窗格中,右键单击 Last Counter 或 Last Help,选择“修改”,单击 Base = Decimal,在“值”数据字段中设置值,再单击“确定”。如有必要,请...
  •  注意:以上代码的执行目的不是检查数据库是否有9条并发记录。  随机读取若干条记录,测试过 Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id) Sql server:select top n * from 表名 order by newid() ...
  • 28.SQLSERVER服务器中,给定表 table1 中两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:Select ID FROM table1 Where ...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题121 使用引用形参什么问题 133 面试题122 指针形参与引用形参什么区别 134 11.3 类成员函数 135 面试题123 什么是类成员函数?哪些特别的类成员函数 135 面试题124 什么是静态函数?如何使用静态函数 ...
  • 3. 让我感觉有必要使用的,是sofaMesh,该功能能够把网络请求与业务代码给拆分开来,避免业务侧需要考虑网络上可能出现的问题,且网络层可独立升级,避免依赖业务侧的升级。可了解下...
  • 健康档案管理系统.RAR

    热门讨论 2010-03-16 21:40:14
    18.信息系统的开发在本单位是否有必要? 19.你认为新的信息系统应该重点解决哪些问题? 20.你所在的工作岗位和你所接触的管理岗位可用哪些定量化的管理方法来提高工作效率? 21.在你所从事或了解的管理和决策工作中...
  • ObjectBox相比于原生Sqlite在批量插入数据方面速度快很多,而且使用put(list or obj...)都是自动开启事务;反之Sqlite对于单条多频次数据入库在速度上远远超过ObjectBox; 业务角度出发,如果是单条多频次bean对象...
  • 其实,不管是大数据还是其他知识的学习,我认为最好的方法无非是先找个视频快速过一遍,总体上了解这门技术干嘛的,是否适合自己。然后结合官网文档细致地过一遍,学习过程中最好结合前人大牛的博客,都是经验之得你...
  • SQL语法大全

    2014-03-30 11:00:11
    COUNT(*|字段名) 对数据行数的统计或对某一栏值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum...
  • 像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
  • Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

是否有必要使用数据库事务