
'${itemjgqr}',这儿明显不对
<foreach collection="list" item="item" index="index" open="" close="" separator="OR">
UPDATE XHXC_RWXD_JCJG
<set>
JGQR='${itemjgqr}',JGCLSM='${itemsm}'
</set>
WHERE ID='${itemid}'
</foreach>
该处的item是作为循环变量处理,你在循环内,不应该采用任何标识符再进行声明,只需要itemid这样写就可以,这表示从对象里面去的该属性
开源世界中的那几个免费数据库
发布时间:2011-11-22 09:34:30 来源:CSDN 评论:0 点击:1476 次 字号:大 中 小
QQ空间 新浪微博 腾讯微博 人人网 豆瓣网 百度空间 百度搜藏 开心网 复制 更多 0
开源数据库MySQLMySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源
开源数据库MySQL
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
盘点:开源社区那些免费的数据库软件
MySQL为多种编程语言提供了API,包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。而其自身是采用C和C++编写的,使用了多种编译器进行测试,所以,MySQL能够保证源代码具有很强的可移植性。这样的一款数据库,自然能够支持几乎所有的 *** 作系统,从Unix、Linux到Windows,具体包括AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种 *** 作系统。最重要的是,它是一个可以处理拥有上千万条记录的大型数据库。
与此同时,MySQL也产生了很多分支版本的数据库也非常值得推荐。
首先是MariaDB,它是一个采用Maria存储引擎的MySQL分支版本,是由原来MySQL的作者 Michael Widenius创办的公司所开发的免费开源的数据库服务器。与MySQL相比较,MariaDB更强的地方在于它拥有更多的引擎,包括Maria存储引擎、PBXT存储引擎、XtraDB存储引擎、FederatedX存储引擎,它能够更快的复制查询处理、运行的速度更快、更好的功能测试以及支持对Unicode的排序等。
其次是rcona,它为MySQL数据库服务器进行了改进,在功能和性能上较MySQL有着很显著的提升。该版本提升了在高负载情况下的InnoDB的性能,同时,它还为DBA提供一些非常有用的性能诊断工具,并且提供很多参数和命令来控制服务器行为。
第三是Percona Server,它使用了诸如google-mysql-tools、Proven Scaling和 Open Query对MySQL进行改造。并且,它只包含MySQL的服务器版,并没有提供相应对 MySQL的Connector和GUI工具进行改进。
非关系型数据库NoSQL
从NoSQL的字面上理解,NoSQL就是Not Only SQL,被业界认为是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
盘点:开源社区那些免费的数据库软件
当然,NoSQL也是随着互联网Web20网站的兴起才能取得长足的进步。关键的需求在于,传统的关系数据库在应付Web20网站,特别是超大规模和高并发的SNS类型的web20纯动态网站显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
首先推荐的是Oracle NoSQL Database,这是一个社区版。Oracle的这个NoSQL Database, 是在10月4号的甲骨文全球大全上发布的Big Data Appliance的其中一个组件,Big Data Appliance是一个集成了Hadoop、NoSQL Database、Oracle数据库Hadoop适配器、Oracle数据库Hadoop装载器及R语言的系统。
其次推荐的是Membase。Membase是NoSQL家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache20的使用许可。该项目托管在GitHubSource tarballs上,目前可以下载beta版本的Linux二进制包。该产品主要是由North Scale的memcached核心团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区网络空间的供应商。
并且,Membase容易安装、 *** 作,可以从单节点方便的扩展到集群,而且为memcached(有线协议的兼容性)实现了即插即用功能,在应用方面为开 发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。通过兼容多种编程语言和框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和编程接口,包括可配置 的告警信息。
Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的节点进行复制。 另外,对存储的数据进行再分配仍然是必要的。
第三推荐的是Hibari。Hibari在日语中意思为“云雀”,它是一个专为高可靠性和大数据存储的数据库引擎,可用于云计算环境中,例如 webmail、SNS和其他要求T/P级数据存储的环境中。同时,Hibari也支持Java,C/C++,Python,Ruby和Erlang语言的客户端。
第四推荐的是memcachedb。这是一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是 不需要严格事务约束,能够被持久化保存的应用场景,例如memcachedb被应用在新浪博客上面。
第五推荐的是Leveldb。这是一个Google实现的非常高效的kv数据库,目前的版本12能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计,特别是LSM算法。LevelDB是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。
XML数据库的优势
XML数据库是一种支持对XML格式文档进行存储和查询等 *** 作的数据管理系统。在系统中,开发人员可以对数据库中的XML文档进行查询、导出和指定格式的序列化。目前XML数据库有三种类型:XMLEnabledDatabase(XEDB),即能处理XML的数据库;NativeXMLDatabase(NXD),即纯XML数据库;HybridXMLDatabase(HXD),即混合XML数据库。
关系数据库中的第一代XML支持是切分(或分解)文档,以适应关系表格或将文档原封不动地存储为字符或二进制大对象(CLOB 或 BLOB)。这两个方法中的任一种都尝试将XML模型强制转换成关系模型。然而,这两种方法在功能和性能上都有很大的局限性。混合型模型将XML存储在类似于DOM的模型中。XML数据被格式化为缓冲数据页,以便快速导航和执行查询以及简化索引编制。
在这里,首要要推荐的XML数据库是Sedna。它号称是一款原生态的XML数据库,提供了全功能的核心数据库服务,包括持久化存储、ACID事务、索引、安全、热备、UTF8等。实现了 W3C XQuery 规范,支持全文搜索以及节点级别的更新 *** 作。
第二款XML数据库是BaseX。这款数据库用来存储紧缩的XML数据,提供了高效的 XPath和XQuery的实现,同时,它还提供一个前端 *** 作界面。
盘点:开源社区那些免费的数据库软件
第三款推荐的是XMLDB。这款数据库使用了关系型数据库来存储任意的XML文档,因为所采用的存储机制,所以文档的搜索速度特别快,同时执行XSL转换也相当快。XMLDB同时还提供了一个PHP的模块,可以应用在Web应用中。
第四块推荐的是X-Hive/DB。它是一个为需要高级XML数据处理和存储功能的软件开发者设计的强大的专属XML数据库。X-Hive/DB Java API包含存储、查询、检索、转换和发表XML数据的方法。
与传统关系型数据库相比,XML数据库具有以下优势:第一,XML数据库能够对半结构化数据进行有效的存取和管理。如网页内容就是一种半结构化数据,而传统的关系数据库对于类似网页内容这类半结构化数据无法进行有效的管理。第二,提供对标签和路径的 *** 作。传统数据库语言允许对数据元素的值进行 *** 作,不能对元素名称 *** 作,半结构化数据库提供了对标签名称的 *** 作,还包括了对路径的 *** 作。第三,当数据本身具有层次特征时,由于XML数据格式能够清晰表达数据的层次特征,因此XML数据库便于对层次化的数据进行 *** 作。XML数据库适合管理复杂数据结构的数据集,如果己经以XML格式存储信息,则XML数据库利于文档存储和检索;可以用方便实用的方式检索文档,并能够提供高质量的全文搜索引擎。另外XML数据库能够存储和查询异种的文档结构,提供对异种信息存取的支持。
hbase的核心数据结构为LSM树。
SM树分为内存部分和磁盘部分。
内存部分是一个维护有序数据集合的数据结构。一般来讲,内存数据结构可以选择平衡二叉树、红黑树、跳跃表(SkipList)等维护有序集的数据结构,由于考虑并发性能,HBase选择了表现更优秀的跳跃表。
磁盘部分是由一个个独立的文件组成,每一个文件又是由一个个数据块组成。对于数据存储在磁盘上的数据库系统来说,磁盘寻道以及数据读取都是非常耗时的 *** 作(简称IO耗时)。为了避免不必要的IO耗时,可以在磁盘中存储一些额外的二进制数据,这些数据用来判断对于给定的key是否有可能存储在这个数据块中,这个数据结构称为布隆过滤器(BloomFilter)。
HBase 是 Google Bigtable 的开源实现,是一个 sparse, distributed, persistent multi- dimensional sorted map,map 的 key 由 rowkey,column family,qualifier,timestamp,type 组成,并据此排序。
架构图
Hbase 的架构是存算分离的,方便扩展,底层存储使用 HDFS,HBase 相关组件提供计算功能,部分元数据存储在 ZK 中。架构图如下:
数据模型
table:表,一个表包含多行数据
row:行,一行数据包含一个唯一标识 rowkey、多个 column 以及对应的值。在 HBase 中,一张表中所有 row 都按照 rowkey 的字典序由小到大排序。
column:列,与关系型数据库中的列不同,HBase 中的 column 由 column family(列簇)以及 qualifier(列名)两部分组成,两者中间使用":"相连。比如 contents:html,其中 contents 为列簇,html 为列簇下具体的一列。column family 在表创建的时候需要指定,不能随意增减。一个 column family 下可以有任意多个 qualifier,也就是 HBase 中的列可以动态增加,理论上甚至可以扩展到上百万列。
timestamp:时间戳,每个 cell 在写入 HBase 的时候都会默认分配一个时间戳作为该 cell 的版本,当然,用户也可以在写入的时候自带时间戳。HBase 支持多版本特性,即同一 rowkey、column 下可以有多个 value 存在,这些 value 使用 timestamp 作为版本号,版本越大,表示数据越新。
cell:单元格,由五元组(row, column, timestamp, type, value)组成的结构,其中 type 表示 Put/Delete 这样的 *** 作类型,timestamp 代表这个 cell 的版本。这个结构在数据库中实际是以 KV 结构存储的,其中(row, column, timestamp, type)是 K,value 字段对应 KV 结构的 V。在每个 HFile 文件中,KV 按序存储,按照 KV 中 key 的字典序进行排序。先比较 rowkey,rowkey 小的排在前面;如果 rowkey 相同,再比较 column,即 column family:qualifier,column 小的排在前面;如果 column 还相同,再比较时间戳 timestamp,即版本信息,timestamp 大的排在前面(也就是最新的排在前面)。
数据文件的物理存储
HFile 在 HDFS 上按照 table、region、column family 分目录存储,如下所示:
/hbase/data/default/table-name/region-name/column-family-name/hfile-name
其中 default 是默认 namespace,一个列簇下的所有 HFile 文件都在同一个列簇目录下,按照文件的新旧程度放置在 LSM-tree 的不同 level,每个 level 只有一个 HFile 文件。
Compact
Minor Compact:选取部分尺寸小的、LSM-tree 中相邻 level 的 HFile,将它们合并成更大的 HFile,但是不清理 type 为 deletes 或 expired versions 的数据。
Major Compact:将一个 Store 中所有的 HFile 合并成一个 HFile,由于只有一个 HFile 文件,这个文件可能会很大,这也是 HFile 文件结构中索引是多层结构的原因。这个过程还会完全清理三类无意义数据:被删除的数据、TTL 过期数据、版本号超过设定版本号的数据。
RegionServer
一个 RegionServe r由一个(或多个)HLog、一个 BlockCache 以及多个 Region 组成。其中,HLog 用作 WAL;BlockCache 可以将 block 缓存在内存中以提升数据读取性能;Region 是 HBase 中数据表的一个数据分片,一个 RegionServer 通常会负责多个 Region 的数据读写,Region 可以来自相同或不同表。Region 由多个 Store 组成,一个 Store 负责一个列簇的数据,比如一个表中有两个列簇,这个表的所有 Region 就都会包含两个 Store。每个 Store 包含一个 MemStore 和多个 HFile,用户数据写入时会先写 HLog,然后将对应列簇数据写入相应的 MemStore,一旦 MemStore 大小超过设定阈值,系统就会将 MemStore 中的数据落盘形成 HFile 文件,HFile 存放在HDFS上。
这里 HLog、MemStore、HFile 与 LevelDB 中对应的相关文件:日志文件、memtable、sstable,格式也有相似之处,先不展开介绍。
ACID
HBase 保证单行事务的 ACID 特性,跨行无法保证。作为该限制的结果之一就是不支持辅助索引,对数据项的更新需要同时对辅助索引进行更新,而这不是原子的。单行事务的保证是通过将单行中涉及的多个 column 修改编码为一条 WAL 来完成的,即使跨多个 column family 也可以。
hbase:meta 表
hbase:meta 表就是分区表,分区表作用可以参考
狂奔的蜗牛:可扩展性之数据分区
该表存储了 Region 到 Region Server 的映射,用来路由 client 读写请求、进行负载均衡等 *** 作。该表的所在 RS 节点存储在 ZK 上。表结构如下:
Key
Region key of the format ([table],[region start key],[region id])
Values
info:regioninfo (serialized HRegionInfo instance for this region)
info:server (server:port of the RegionServer containing this region)
info:serverstartcode (start-time of the RegionServer process containing this region)
当 Region 发生 split 时候,values 中会新建两列:info:splitA 和 info:splitB。这两列代表两个新的子 Region,列值同 info:regioninfo 一样,也是 serialized HRegionInfo instance,在 Region 完成 split 后,对应的旧行将被删除。
空的 start key 表示 HBase 一张表的 start 或者 end,hbase:meta 表中如果一个 Region 有空的 start key,那么这个 Region 是对应表的第一个 Region,如果 start key 和 end key 都为空,那么这个 Region 是表的唯一 Region。
Region 的划分使用范围分区策略,按照 rowkey 划分。
数据写入
客户端将用户的写入请求进行预处理,并根据集群元数据定位写入数据所在的 RegionServer,将请求发送给对应的 RegionServer。
RegionServer 接收到写入请求之后,先写 WAL,再写入对应 Region 列簇的 MemStore。
当 Region 中 MemStore 容量超过一定阈值,系统会异步执行 flush *** 作,将内存中的数据写入 HFile。
数据读取
读取有 get 和 scan 两种 API,get 通常根据给定 rowkey 查找一行记录,scan 通常根据给定的 start key 和 stop key查找多行满足条件的记录。技术实现上,get 是特殊的 scan,scan 的条数为 1。scan 并没有设计为一次 RPC 请求,因为一次 scan *** 作的扫描结果可能数据量非常大。HBase 会根据设置条件将一次大的 scan 拆分为多个 RPC 请求,每个 RPC 请求称为一次 next 请求,每次只返回规定数量的结果。
1、client 根据集群元数据定位查询数据所在的 RegionServer,将请求发送给对应的 RegionServer。
2、对包含用户查询数据的 Region 的 HFile 进行过滤,过滤方法主要有三种:
根据 KeyRange 过滤:因为 HFile 中所有 KeyValue 数据都是有序的,所以如果待检索 row 范围 [ start row,stop row ] 与文件起始 key 范围 [ first key,last key ] 没有交集,就可以过滤掉该 HFIle。
根据 TimeRange 过滤:HFile 中元数据有一个关于该 File 的 TimeRange 属性 [ miniTimestamp, maxTimestamp ],如果待检索的 TimeRange 与该文件时间范围没有交集,就可以过滤掉该 HFile;另外,如果该文件所有数据已经过期,也可以过滤淘汰。
根据布隆过滤器进行过滤:根据待检索的 rowkey 获取对应的 Bloom Block 并加载到内存(通常情况下,热点 Bloom Block 常驻内存),使用布隆过滤器中的数据确定待检索 rowkey 是否一定不存在于该 HFile。
3、从剩余 HFile 中读取待查找 key:首先根据 HFile 中的索引定位目标 block,然后看 Block Cache 中是否存在,不存在则从 HDFS 中 seek 读取,之后在 block 中顺序查找指定 key。由于不同 HFile 文件之间的数据是无序的,因此需要归并排序,实际上 MemStore 使用 MemStoreScanner 读取数据,HFile 使用 StoreFileScanner 读取数据,最后 KeyValueScanner 将使用 MemStoreScanner 和多个 StoreFileScanner 来构建最小堆,保证所有数据有序。
数据库的存在对于任何一个软件的运行以及网站信息的存储都是非常有必要的。但是并不是所有的存储方式都能满足需求,我们需要根据不同的情况进行调整。下面IT培训就从案例分析的角度出发来了解一下,不同的数据库存储结构的优劣性。
从读/写工作负载平衡、一致性需求、延迟和访问模式等方面看,应用是各异的。如果我们能对数据库和存储内部设施架构决策了然于胸,那么将有助于我们理解系统行为模式的原因所在,一旦在问题时能解决问题,并能根据工作负载调优数据库。
B树和LSM树结构上的大差别之一,在于优化的目的,以及优化的意义。
下面对B树和LSM树做一个对比。总而言之,B树具有如下属性:
B树是可变的,这支持通过引入一些空间开销,以及更为关联的写路径,实现就地更新。B树并不需要完全的文件重写或多源合并。
B树是读优化的。即B树不需要从多个源读取(因此也不需要此后的合并 *** 作),这简化了读路径。
写可能会触发节点的级联分割,这会使一些写 *** 作更昂贵。
B树是针对分页(块存储)环境优化的,其中不存在字节地址。Theyareoptimizedforpagedenvironments(blockstorage),wherebyteaddressingisnotpossible
虽然也需要重写,但是通常情况下B树存储要比LSM树存储需要更少的维护。
并发访问需要读/写隔离,其中一系列的锁和闩(latch)。
LSM树具有如下特性:
LSM树是不可写的。SSTable是一次性写入磁盘的,永不更新。紧缩 *** 作通过从多个数据文件移除条目,并合并具有相同键的数据,实现空间的整合。在紧缩过程中,已合并的SSTable将被丢弃,并在成功合并后移除。不可写提供的另一个有用特性,就是刷新后的表可并发访问。
LSM是写优化的。这意味着写入 *** 作将被缓存,并顺序地刷新到磁盘中,潜在地支持磁盘上的空间本地性。
读 *** 作可能需要从多个数据源访问数据。因为不同时间写入的具有相同键的数据,可能会落在不同的数据文件中。记录在返回给客户前,必须经过合并过程。
LSM树需要做维护和紧缩,因为缓存的写入 *** 作将被刷新到磁盘。
以上就是关于mybatis如何对db2数据库进行批量修改 *** 作全部的内容,包括:mybatis如何对db2数据库进行批量修改 *** 作、四大开源数据库是哪些、hbase的核心数据结构是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)