fastdb

时间:2024-03-25 16:40:36编辑:奇闻君

关系数据库、内存数据库和实时数据库 之间的区别是?

1 三者的关注不同
关系数据库的数据内容按照关系表的方式存储在硬盘上 等需要使用的将数据调入内存。
内存数据库数据常驻内存中,因此反应速度比较快 但是因为内存是有限的 所以内存数据库在设计的时候应该设计的小巧灵活 存储的数据量比关系型数据库要小的很多
实时数据库设计的目的是实时更新数据库中的数据,通过传感器等设备来保障数据库中的数据的最新的


实时数据库是内存数据库吗?

实时数据库是由库和接收程序组成的,接收程序不断的从别的终端取得数据,然后存入数据库。比如一秒取一个数据,数据经程序存入数据库。实时数据库当然能常驻内存外。一般是由另一个程序读取这些数据。这个程序可能只取前10条或者前5条,因为实时数据量确实很大。一般我们在股票系统中取前10条,那么客户就能看到股票的涨跌幅度了。我们公司用到很多实时数据都是从证交所来得数据,15分钟一次。


请教: 以下是我个人的理解 1.dataset对象:官方网站说是数据的内存驻留表示形式 如果它属于内存数据库,

1,首先内存不是共享的,一个用户拥有自己独立的一块内存,在一般情况下,别的程序是无法查看的【因此没有什么并发的问题,我是这么理解你的意思的】
2,缓存而已,一个用户搜到了100条数据,这100条数据放在dataset中,如果还需要此数据,直接从dataset中取,不需要连接数据库了
// 数据库才要考虑并发,dataset只是缓存,它是当前用户内存中模拟的数据库,不是真正的数据库,它本身没有处理数据的能力

3,都是服务器控件,没啥大的区别,asp.net服务器控件的存在意义就是跟C#完美结合,快速敏捷开发web项目;html服务器控件存在的意义就是,html本身的那些控件,可以让你在服务器端进行处理了,两者都是服务器端处理,所以除了内部机制稍有不同,没有区别

=====================
我听你的意思还想在数据库中的数据更改后通知dataset?这显然是不可能的,因为连接已经断开了,数据库怎么通知你的程序?要想维持dataset 的数据是最新的, 就应该每隔一段时间(5分钟什么的)访问一次数据库,来保证你的数据是最新的。
如果你说你不让连接断开,这显然是不对的程序设计,因为数据库连接是有限的,你不放开连接,别人怎么用?


请问关于如何建立内存数据库问题

间的表,数据在里面倒来倒去,从这个表合计到那个表.不但速度很慢,而且,这个过程还有可能影响了正常的业务.减慢了服务器响应时间.也经常有人出于业务的考虑,如某些系统要实时数据采集,有些系统可能每秒有上万条的 INSERT INTO 量.我看了一下相的危机,尤其是中小型企业,每一分钱都算得紧紧的,我相信你这个DBA也很难向老板开口.不扯了,如果真的要在内存中建一个数据库,不难,很简单.1.下载一个 ramdisk 或类拟的软件,先在2G左右的内存虚拟成一个硬盘.2.在你的实体硬盘上建立一个空的数据库(直接在虚拟盘中建库是不可能的). 设置这个库的事务方式为简单.3.分离这个新建的库.4.将这个库 COPY 到你的虚拟盘上,然后附加.我在我的电脑上测试:L730T + 2G + 320G.100万条,基本是每秒 INSERT INTO 20000 条左右,而且,这个数据很平稳.OK,你的内存数据库完成了.以后呢,凡是分析报表扯到的临时中间表,都可以放到这个库里,用完就KILL,或者你有很多实时数据要采集,也放到这个库里(要注意隔一定时间回写到实体表,还要注意断电. :)


如何打造Redis时代的完美体系

内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。
在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能。
作用类似于缓存,并不注重数据完整性和数据一致性。
基于键值型的内存数据库比关系型更加易于使用,性能和可扩展性更好,因此在应用上比关系型的内存数据库使用更多。
比较FastDB、Memcached和Redis主流内存数据库的功能特性。
FastDB的特点包括如下方面:
1、FastDB不支持client-server架构因而所有使用FastDB的应用程序必须运行在同一主机上;
2、fastdb假定整个数据库存在于RAM中,并且依据这个假定优化了查询算法和接口。
3、fastdb没有数据库缓冲管理开销,不需要在数据库文件和缓冲池之间传输数据。
4、整个fastdb的搜索算法和结构是建立在假定所有的数据都存在于内存中的,因此数据换出的效率不会很高。
5、Fastdb支持事务、在线备份以及系统崩溃后的自动恢复。
6、fastdb是一个面向应用的数据库,数据库表通过应用程序的类信息来构造。
FastDB不能支持Java API接口,这使得在本应用下不适合使用FastDB。
Memcached
Memcached是一种基于Key-Value开源缓存服务器系统,主要用做数据库的数据高速缓冲,并不能完全称为数据库。
memcached的API使用三十二位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于 memcached通常只是当作缓存系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程序更新memcached内的资料。
memcached具有多种语言的客户端开发包,包括:Perl、PHP、JAVA、C、Python、Ruby、C#。
Redis
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客户端。


内存数据库主流的有哪些,并给出各自特点!

目前关系型内存数据库主要有MySQL(使用内存存储引擎)、SQL Server(In-Memory OLTP)、数蚕内存数据库、Oracle 内存数据库。
MySQL:免费产品,内存存储引擎使用较少。
SQL Server:微软的商业化产品,是为了适应大数据等业务产品新添加的存储引擎,微软SQL语句兼容性好,商业化成熟度高。
数蚕内存数据库:数蚕科技针对中小型企业的内存数据库,目前成熟度较弱,c++接口特性良好,SQL特性较弱,只支持基本的SQL语句操作,不支持事务。
Oracle 内存数据库:基于内存计算的关系数据库, 提供了响应时间极 短且吞吐量极高的应用程序。

非关系型内存数据库主要有FastDB、Memcached和Redis等主流内存数据库。结构简单,支持数据结构多以基础数据结构为主,一般应用于缓存等非关键数据存储,其优点是数据查询速度快,对下层编程接口良好。


主流的存储架构有哪些?各自有什么特点

内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。
在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能。
作用类似于缓存,并不注重数据完整性和数据一致性。
基于键值型的内存数据库比关系型更加易于使用,性能和可扩展性更好,因此在应用上比关系型的内存数据库使用更多。
比较FastDB、Memcached和Redis主流内存数据库的功能特性。
FastDB的特点包括如下方面:
1、FastDB不支持client-server架构因而所有使用FastDB的应用程序必须运行在同一主机上;
2、fastdb假定整个数据库存在于RAM中,并且依据这个假定优化了查询算法和接口。
3、fastdb没有数据库缓冲管理开销,不需要在数据库文件和缓冲池之间传输数据。
4、整个fastdb的搜索算法和结构是建立在假定所有的数据都存在于内存中的,因此数据换出的效率不会很高。
5、Fastdb支持事务、在线备份以及系统崩溃后的自动恢复。
6、fastdb是一个面向应用的数据库,数据库表通过应用程序的类信息来构造。
FastDB不能支持Java API接口,这使得在本应用下不适合使用FastDB。
Memcached
Memcached是一种基于Key-Value开源缓存服务器系统,主要用做数据库的数据高速缓冲,并不能完全称为数据库。
memcached的API使用三十二位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于 memcached通常只是当作缓存系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程序更新memcached内的资料。
memcached具有多种语言的客户端开发包,包括:Perl、PHP、JAVA、C、Python、Ruby、C#。
Redis
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客户端。


redis等内存数据库可否代替共享内存作为进

mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。mongodb和memcached不存在谁替换谁的问题。 和memcached更为接近的是redis。它们都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。在我们团队的项目中,一开始用的是memcached,后来用redis替代。 相比memcached: 1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。 2、redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。 3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似LRU的算法把内存中的最不常用数据保存到硬盘的页面文件中。 4、redis原生支持的数据类型更多,使用的想象空间更大。 5、前面有位朋友所提及的一致性哈希,用在redis的sharding中,一般是在负载非常高需要水平扩展时使用。我们还没有用到这方面的功能,一般的项目,单机足够支撑并发了。redis 3.0将推出cluster,功能更加强大。 6、redis更多优点,请移步官方网站查询。


fastdb怎样实现数据的读与写操作

fastdb怎样实现数据的读与写操作
5.1 关系运算符和表达式
在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。
5.1.1 关系运算符及其优先次序
在C语言中有以下关系运算符:
1) < 小于
2) <= 小于或等于
3) > 大于
4) >= 大于或等于
5) == 等于
6) != 不等于
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,,>=的优先级相同,高于==和!=,==和!=的优先级相同。
5.1.2 关系表达式
关系表达式的一般形式为:
表达式 关系运算符 表达式
例如:
a+b>c-d
x>3/2
‘a’+1<c
-i-5*j==k+1
都是合法的关系表达式。由于表达式也可以又是关系表达式。 因此也允许出现嵌套的情况。例如:
a>(b>c)
a!=(c==d)
等。
关系表达式的值是真”和“假”,用“1”和“0”表示。


求教Oracle内存数据库timesten的使用

然后通过如下的程序代码进行访问

import java.sql.*;
import javax.sql.*;
public class Tttest{
public static void main(String args[])
{
//远程连接需要的url,程序和TT不在一台服务器。需要按照上节的方法,提前定义好DSN
String URL = "jdbc:timesten:client:dsn=wzyCS_tt70";
//本地连接需要的url,程序和TT在同一台服务器
//String URL = "jdbc:timesten:direct:dsn=wzy_tt70";

Connection con = null;
try {
//加载TT的驱动程序
Class.forName("com.timesten.jdbc.TimesTenDriver");
} catch (ClassNotFoundException ex) {ex.printStackTrace();
}
try
{
//获得连接
con = DriverManager.getConnection(URL);
System.out.println("connected");
//创建jdbc 语句
java.sql.Statement st=con.createStatement();
//执行sql 查询操作
java.sql.ResultSet rs=st.executeQuery("select * from test");
while (rs.next())
{
//取出结果集
System.out.println(rs.getString("id"));
}

//关闭连接
con.close();
// Handle any errors
} catch (SQLException ex) {
ex.printStackTrace();}
}
}


如果TT工作正常,DSN定义正常,我们就能看到java程序输出 结果了。
除了刚开始的url和driver不一样以外,其他的都是标准的jdbc语法,很简单,也很强大。


谁可以告诉我一些关于内存数据库的情况

内存数据库数据结构分析


按照目前内存芯片密度每年2倍的增长速度,在未来10年中,配置1 G或更大的内存将是很平常的事。内存容量的快速增长对数据库管理系统有着深刻的影响。在某些场合,将整个数据库放进内存是可能的,正常的查询处理可以完全脱离硬盘。另外,和传统的数据库应用相比,有大量的新兴应用,目前的内存大小已经足够了。
   在数据库系统中,有2种方法来使用大量的内存。
  (1)增大缓冲池 将一个事务所涉及的数据都放在缓冲池中。当采取这种方法的时候,算法优化的目标仍然是最小化磁盘访问。
  (2)常驻内存数据库 将整个数据库放进内存中。 这种方法需要重新设计一种数据库管理系统,需要对查询处理、并发控制与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存。

1 磁盘和内存
  内存数据库的索引结构和基于磁盘系统的索引结构不同,面向磁盘的索引结构的目标是最小化磁盘访问次数和空间占用,而面向内存的索引结构全部放在内存中,因此没有磁盘访问次数的最小化。这样,内存索引的目标是减少整体的计算时间同时尽可能少地占用内存。由于关系常驻内存,在索引中没有必要存储真实的属性值,而存储指向元组的指针,当需要的时候通过这些指针能够得到属性值。这样做有4个优点:
  (1)单一元组指针便能访问元组的属性和元组本身,这就减少了索引的大小。
  (2)避免了处理在索引中的长字段、可变长字段以及压缩技术。
  (3)当更新索引操作时,移动指针将比移动属性值更廉价。
  (4)由于单个元组指针提供访问这个元组中的任何字段,采用一种特殊的机制多属性索引的需要将减少。

2 物理组织方法
  内存数据库的总体设计目标是使内存和CPU的利用率尽可能高,而内存数据库的物理组织是实现该目标的基础,其存储结构、索引结构、中间数据存储结构都必须考虑内存的直接存取这一特征,这里介绍几种适合于内存数据库的物理组织方法。
2.1 区-段式
  区-段式组织是基于关系数据模型的。他将存储空间逻辑划分为“分区”,每一个分区存储一个关系。由若干“段”组成,一个段是内存中固定长度的连续区域,相当于“页”,但比页大,是内外存I/O的单位,也是内存空间分配以及内存数据库恢复的单位.


 一个段中的一个数据记录就是一个关系元组。每个记录有一个惟一的标识符RID(Record Identifier),他是一个三元组<P,S,L>,其中P,S,L分别为分区号、段号、段内的记录槽号,记录槽(RecordSlots)包含了对应记录的长度和记录的首地址。这样由RID经分区表和相对应的段表找到相对应的记录槽,按槽中的地址和长度便可直接存取所要的记录。其实,对于内存数据库,存取方法返回的不必是所需的记录数据的副本,只需将其槽中的地址返回即可。


2.2 影子内存式
  按影子内存式组织的内存数据库空间可以划分为2部分:一部分是MMDB的主拷贝;另一部分为“影子拷贝”。

在事务的正常操作期间,每次查询都产生一个分别对于影子内存SM(ShadowMemory)和主拷贝PDB(Primary DataBase)的双地址,且总是先对SM试探,若不成功,再对PDB操作。所有的更新操作都在SM中进行,且都记录在活动日志中(Active Log)。每当一个事务提交时,由他所产生的在SM中的“后映像”拷贝到PDB中。使用影子内存的优点是:
  (1)减少了日志缓冲区,因为其后映像区和用户区合二为一。
  (2)省去因事务失败或系统故障时的UNDO操 作,只清除相应的影子内存即可。
  (3)减少对MMDB(PDB)存取,各事务可并行对各SM区操作。
  (4)缩短恢复过程,这是因为一方面如(2)所述,省去UNDO型操作,只需做REDO型操作;另一方面还可以就当前事务对SM做“部分恢复”以后,就先启动正常事务处理,然后按需要逐步恢复PDB。
  影子内存式和区-段式可以组合使用


上一篇:叶永鋕

下一篇:antispyware