精华内容
下载资源
问答
  • Python 多连接共享Sqlite 内存数据库

    千次阅读 2018-03-21 15:56:28
    简单的测试代码:import sqlite3p = sqlite3.connect("file:memDB1?mode=memory&cache=shared", uri=True)p.execute('CREATE TABLE tbTest (fld1, fld2)')p.execute("INSERT INTO tbTest ...

    简单的测试代码:

    import sqlite3

    p = sqlite3.connect("file:memDB1?mode=memory&cache=shared", uri=True)
    p.execute('CREATE TABLE tbTest (fld1, fld2)')
    p.execute("INSERT INTO tbTest VALUES ('fld1', 'fld2')")
    p.commit()
    list(p.execute('select * from tbTest '))

    q = sqlite3.connect("file:memDB1?mode=memory&cache=shared", uri=True)
    q.execute("INSERT INTO tbTest VALUES ('fld3', 'fld4')")
    q.commit()

    list(q.execute('select * from tbTest '))

    执行结果:


    展开全文
  • 数据库共享内存

    2015-11-08 01:51:20
    block格式的关系数据库可以采用多进程模型(配合共享内存),nosql类非关系型数据库不太适合采用该模型。
    block格式的关系数据库可以采用多进程模型(配合共享内存),nosql类非关系型数据库不太适合采用该模型。
    
    展开全文
  • 利用内存文件(共享内存)实现简单的数据库索引   1. 概要 当需要对一些数据进行大量重复的读写操作并且对效率有很高的要求的时候,使用传统数据库(oracle, mysql)往往不能满足效率高的要求,这个时候我们可以...

    利用内存文件(共享内存)实现简单的数据库索引

     

    1.    概要

    当需要对一些数据进行大量重复的读写操作并且对效率有很高的要求的时候,使用传统数据库(oracle, mysql)往往不能满足效率高的要求,这个时候我们可以使用内存文件(共享内存)来保存我们的数据。这样的话,对文件的读写操作就变为对内存的读写操作,效率那是大大的提升。不过,内存文件虽然已经极大的提高效率了,但是,往往我们并不清楚,我们所需要的那条数据是文件的第几条数据,因此,为了获取我们所需要的数据,必须从文件第一条记录开始循环读取,一直到我们所需要的那条数据为止。假定我们所需要的是第N条数据,那么我们不得不循环读取并且比较N次才能得出结果,事实上前面N-1次的读取和比较除了花时间之外,并没有实际的用处。而且随着N越大,时间也就花费的越多,效率自然越低。如果我们能减少读取和比较次数,将N变为一个尽可能小的数(比如小于10),那么效率将会有质的飞跃,如何能做到这个效果呢,答案就是索引。

    。。。。。(待写)

     

    展开全文
  • 共享内存的诡异问题草木瓜20091211一、序数据库在应用系统中非常复杂的,以Oracle数据库为例,其复杂度不亚于任何操作系统。自已动手写个内存数据库,简直就是天方夜谭。但这次我非要谭一谭,开发一个内存数据库。...

    内存数据库研发日志之一.共享内存的诡异问题

    草木瓜

    20091211


    一、序

    数据库在应用系统中非常复杂的,以Oracle数据库为例,其复杂度不亚于任何
    操作系统。自已动手写个内存数据库,简直就是天方夜谭。但这次我非要谭一
    谭,开发一个内存数据库。不仅包括后台控制调用部分(考虑用C/C++实现),
    而且还准备写一个WebConsole(考虑用Java实现)。

    话还没说完,这个数据库功能要简单而且实用,性能要十分出色,这就是目标,
    不是说要把Oracle之类打倒,那反而是痴人说梦,给你30年也搞不定。至于要
    多少时间实现,只能说是慢慢来,因为只是打算利用业余时间。

    这方面内容先前其实就有所准备,不过写了一个非常不象样的东西,比Oracle
    第一个版本还要不象样!想了下,这个版本,命名为2.0,这个似乎有点象Oracle,
    因为它卖给用户的第一个版本就是2.0。

     

    二、共享内存

    还是与Oracle一样,使用共享内存存放数据库数据。不过今天测试偶然发现了
    一个问题,共享内存部分不能共享。问题就在于这个“部分”!

    现象描述:

    1. 启动内存测试程序

    [oracle@windows memdb2] ./testtablevar 123
    [ERR] Memory::Open: No such file or directory
      Size,    Max,    Hwm, HeadSize,   Free, Reused,   Used
    ------------------------------------------------------------
    10000000,   2441,      1,    58644,      1,      0,      0
        ID,    Key,   Hash,  Start,    Len,    Pre,   Next
    ------------------------------------------------------------
         0,      0,      0,      0,      0,      0,      0
         1,      0,      0,      1,   2441,      0,      0
    C>
    显示如上内容,这里其实已经创建了共享内存:

    2. 查看Linux下共享内存信息

    [oracle@windows memdb2] ipcs
    ------ Shared Memory Segments --------
    key        shmid      owner      perms      bytes      nattch     status     
    0x00000123 524288     oracle    640        500000000  0      

    3. 重新运行程序

    [oracle@windows memdb2]$ ./testtablevar 123
      Size,    Max,    Hwm, HeadSize,   Free, Reused,   Used
    ------------------------------------------------------------
    10000000,   2441,      1,    58644,      1,      0,      0
        ID,    Key,   Hash,  Start,    Len,    Pre,   Next
    ------------------------------------------------------------
         0,      0,      0,      0,      0,      0,      0
         1,      0,      0,      0,      0,      0,      0
    C>
    注意,部分内存信息丢失。

    There  is  currently no intrinsic way for a process to ensure exclusive
    access to a  shared  memory  segment.   Asserting  both  IPC_CREAT  and
    IPC_EXCL  in  shmflg only ensures (on success) that a new shared memory
    segment will be created, it doesn’t imply exclusive access to the  seg-
    ment.

    奇怪吧~

    4.在上面这个界面不退出,直接输入命令r,p,q

    C>r
    C>p
        ID,    Key,   Hash,  Start,    Len,    Pre,   Next
    ------------------------------------------------------------
         0,      0,      0,      0,      0,      0,      0
         1,      0,      0,      1,   2441,      0,      0
    C>q

    r作用是重新初始化内存(不调用任何内存Call,只是逻辑处理),p打印信息
        
    5.再重新运行程序

    [oracle@windows memdb2]$ ./testtablevar 123
      Size,    Max,    Hwm, HeadSize,   Free, Reused,   Used
    ------------------------------------------------------------
    10000000,   2441,      1,    58644,      1,      0,      0
        ID,    Key,   Hash,  Start,    Len,    Pre,   Next
    ------------------------------------------------------------
         0,      0,      0,      0,      0,      0,      0
         1,      0,      0,      1,   2441,      0,      0
    C>

    一切正常,换一个程序查询内存,还是没问题!


    6.问题原因

    刚写到这里,突然知道问题所在了,就是内存地址的问题!每次打开共享
    内存时一定要重新设置所有指针!

    void TableVar::Open(void * _addr) {

     this->m_pHead = (TTableVarHead *)_addr;

    }

    须改为

    void TableVar::Open(void * _addr) {

     this->m_pHead = (TTableVarHead *)_addr;
     
     this->m_pHead->data = (char *)_addr + this->m_pHead->headsize ;
     this->m_pHead->chain = (TTableVarHeadChain *)( (char *)this->m_pHead + sizeof(TTableVarHead) );
     
    }

    所有的内存表类都所在这个问题!仔细回顾一下,上次不象样的程序好象
    也出过类似问题,及时写好日志是个非常好的办法,害得我搞了半天!


    三、后记

    研发道路一定布满荆棘,但问题关键在于总结与记录,去不断丰富个人的
    设计思想,扩展软件知识面。最终获得一定远比一个不象样的数据库要多
    得多。

    展开全文
  • 磁盘数据库因为磁头机械运动及系统调用因素导致速度降低,后来逐渐增加内存作用,有两种技术:共享内存技术、内存数据库内存数据库(Main Memory Database),又称为主存数据库,按历史发展分成三个阶段1: 雏形期...
  • 共享池在数据库中可以说是相当重要动力资源,关系着数据库的性能瓶颈。 什么是共享池呢?  共享池是内存结构中SGA(系统全局区)的一部分,包含了:库缓冲区、数据字典缓冲区、服务器结果缓冲区、预留池,也是着...
  • 内存数据库

    千次阅读 2014-02-23 19:53:25
    目前在国内电信行业,内存数据库已经是普遍...内存数据库我们经常使用的共享内存类似的技术产品,比较专业,对客户直接的感受就是,给了他们一个可以图形化维护的工具,感觉上稳定性扩展性比各个厂商土鳖的共享
  • 内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能,作用类似于缓存,并不注重数据完整性和数据一致性。基于键值型的...
  • Oracle的内存数据库战略

    万次阅读 2016-05-19 10:03:27
    此文简介了Oracle内存数据库的两大分支,TimesTenDatabase In-Memory,非常值得一读,两种技术的重要特性完全涵盖,可以让读者很快的对Oracle内存数据库技术的关键点有一个全面的认识,建议看完此文后可以对参考中...
  • 我们都知道,进程间的通信方式有一种是 共享内存,不过共享内存有个缺点,就是需要事先申请一块大小固定的内存块。而我们实际使用的内存实际上...共享内存和内存数据库作为进程间的通信的优缺点,大家还有什么见解吗?
  • 常用内存数据库介绍

    万次阅读 2018-07-09 23:18:55
    1. 内存数据库简介 1.1 概念 一、什么是内存数据库 传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来进行数据的操作,...
  • 内存数据库与磁盘数据库

    千次阅读 2018-09-02 10:26:34
    1、磁盘数据库需要频繁地访问磁盘来进行数据的操作,由于对磁盘读写数据的操作一方面要进行磁头的机械移动,另一方面受到系统调用(通常通过CPU中断完成,受到CPU时钟周期的制约)... 内存数据库数据处理速度比传统...
  • nosql数据库与内存数据库

    千次阅读 2015-09-29 11:27:45
    NoSQL数据库没有标准的查询语言(SQL),许多NoSQL数据库都有REST式的数据接口或者查询API。 使用场景: 1、数据模型比较简单; 2、需要灵活性更强的IT系统; 3、对数据库性能要求较高; 4
  • 内存数据库技术选型

    千次阅读 2017-08-27 12:37:24
    最近一段时间研究了内存数据库,总结了一下,分享给大家。我们先从应用场景说起。 一. 内存数据库的应用场景 数据缓存:将经常使用的数据存放在内存中,全局共享,减少数据库之间的交互频率,提升数据访问速度...
  • 共享存储数据库集群

    千次阅读 2020-12-31 17:22:38
    共享存储数据库集群 DMDSC 简介 DM 共享存储数据库集群的英文全称 DM Data Shared Cluster,简称 DMDSC。DM 共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库, 具有高可用、高性能、负载均衡等特性...
  • Oracle分配共享内存失败,ALTER日志显示如下错误信息。 Errors in file /oracle/db/diag/rdbms/ora01/ora01/trace/ora01_reco_233670.trc: ORA-00604: error occurred at recursive SQL level 1 ORA-04031: ...
  • 内存数据库FastDBSQLite性能测评

    千次阅读 2019-07-11 16:34:28
    一、引言 在很多项目中,经常会碰到这样的需求,需要对大量数据进行快速存储、...针对这些情形,我们通常需要选择高性能的数据库产品,而且通常需要使用内存数据库,顾名思义,内存数据库指的是所有的数据访问控...
  • 常用内存数据库

    千次阅读 2014-12-04 06:10:58
    如果你有许多的客户端程序要通过网络访问一个共享数据库, 你应当考虑用一个客户端/服务器数据库来替代SQLite. SQLite可以通过网络文件系统工作, 但是因为大多数网络文件系统都存在延时, 因此执行效率不会很高...
  • Sqlite内存数据库

    千次阅读 2014-03-14 21:40:42
    一、内存数据库:    在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",...
  • 内存数据库的比较

    千次阅读 2014-10-11 20:17:24
    这里比较四个内存数据库系统情况,分别是Timesten、AltiBase、ExtremeDB、CacheDB(自研),需要说明的是,这是这段时间的粗略感性认识(并没有经过一段时间的使用,是换不来理性的客观认识)   一、市场与技术...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,577
精华内容 122,230
关键字:

共享内存和数据库