- 浏览: 46407 次
- 性别:
文章分类
- 全部博客 (103)
- 一致性哈希算法 (1)
- 云计算 (2)
- Cassandra学习 (2)
- Java网络通信与笔记 (14)
- ZooKeeper学习 (1)
- HBase学习 (1)
- Sqoop学习 (1)
- Java网页开发之 (2)
- Java网络通信框架 (5)
- (memcached)分布式内存对象缓存系统 (1)
- Redis学习 (5)
- Shell学习 (14)
- Linux学习 (10)
- MySQL优化 (17)
- C++ (7)
- HTML5 (5)
- Android学习 (5)
- 网络 (2)
- Node.js (1)
- D3.js (1)
- R语言学习 (3)
- Spark (1)
- CAN协议 (2)
- 解决方案 (0)
最新评论
数据库中的散列法是使用计算值来分配表格数据的方法,它比在整个索引中搜索要好的多。一个哈希散列答应你在数据库表格中存储数据,以便这些行的要害计算的相同值存储在相同的位置。
只有那种数据量超大的数据库才会用到. 表散列与水平分割相似,但没有水平分割那样的明显分割界限, 它由哈希函数和键值决定一条记录的保存文件,这样是为了IO更加均衡。
水平分区将表分为多个表。每个表包含的列数相同,但是行更少。例如,可以将一个包含十亿行的表水平分区成 12 个表,每个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需引用相应月份的表。
而垂直分区则是将原始表分成多个只包含较少列的表。
表散列与水平分割相似,但没有水平分割那样的明显分割界限,
现在要开发一个评论系统,由于考虑到数据量会很大,希望用一个hash算法,把数据分散到多个表中。请大家给一个好的hash算法
对hash算法的要求:
开始可能只使用3张表存放数据,但以后会扩展到5到10张表,这个hash算法要考虑到增加新的表的情况。
我正好也在研究这个问题哈哈
在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,看你使用了什么样的DB,就参考相应的解决方案来实施即可。
集群通常会使用CDN与GSBL与DNS负载均衡技术,每个地区一组前台服务器群,例如:网易,百度使用了DNS负载均衡技术,每个频道一组前台服务器,一搜使用了DNS负载技术,所有频道共用一组前台服务器集群。
网站使用基于Linux集群的负载均衡,失败恢复,包括应用服务器和数据库服务器,基于linux-ha的服务状态检测及高可用化。
应用服务器集群可以采用apache+tomcat集群和weblogic集群等;web服务器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;Squid也可以,方法很多,可以根据情况选择。
上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。
数据库中的散列法是使用计算值来分配表格数据的方法,它比在整个索引中搜索要好的多。一个哈希散列允许你在数据库表格中存储数据,以便这些行的关键计算的相同值存储在相同的位置。
为了在哈希散列中找到一个行,查询机应用哈希函数到一个行的关键值,然后分配和那个值相关的数据块。在很多情况下,一个哈希散列比一个普通的索引快。
Oracle在Oracle 7面世的时候就支持哈希散列。哈希散列的优势仅仅在于当表格的访问在关键值上首先使用的是=操作符,这个表格是静态的,并且仅仅当数据行需要的时候。当和一个普通非索引或者散列表格比较的时候,全表扫描就会变慢。
比如,假设你想要创建一个表格来查找英语单词的发音。你需要迅速的分配一个英语单词的发音,但是一个字典,比如cmudict0.3有大概106,000个单词。
创建哈希散列最大的工作任务就是分析参数。你需要计算分析每个散列的带和散列关键字包含的内容数量。如果三类是正整数,那么你可以设置最小值的大小如果你需要定义自己哈希函数。
对于任何其他类型的数据,比如下面这个列子,你需要计算参数的最小大小。你可以通过使用DBMS_UTILITY.GET_HASH_VALUE函数来获得一个确切的估计。
create table cmudict
(
word varchar2(22) primary key,
pron varchar2(62)
);
使用其他的快速装入程序比如SQL*来装入这些数据:
select max(blksize)
from (select sum(3+nvl(vsize(word),0)+1+nvl(vsize(pron),0)+1) blksize
from cmudict group by dbms_utility.get_hash_value(word,1,10007)) blkqry;
NVL(VSIZE(col),0)+1表达式使用每个栏来分析字节的数字。3+是行的开销,所以表达式的总和是存储每个行所需要的大小。在每个哈希函数组中,求和行的大小,我们获得每个散列数据块所许哟啊的字节数量。1是真的不切实际,但是10007,一个质数,是对哈希关键字参数的最好猜测。
增加或者减少这个值到另外一个质数知道上面的分析结果降低数据块大小的重要性。这些数字,分析的结果和GET_HASH_VALUE的第三个参数应该被使用来创造散列。
现在你可以创造一个散列并使用这个散列存储数据再创建一个表格。
create cluster cmudict_cluster (word varchar2(22))
size 6000
single table
hashkeys 739;
create table cmudict
(
word varchar2(22) not null,
pron varchar2(62)
)
cluster cmudict_cluster(word);
如果你需要分析这个散列:
analyze cluster cmudict_cluster compute statistics;
select * from user_clusters where cluster_name = 'CMUDICT_CLUSTER';
你可以看到AVG_BLOCKS_PER_KEY 是 1.
可以为查询语句做注解select * from cmudict where word = 'HELLO' returns:
SELECT STATEMENT
TABLE ACCESS HASH
CMUDICT
数据库中的散列法是使用计算值来分配表格数据的方法,它比在整个索引中搜索要好的多。一个哈希散列答应你在数据库表格中存储数据,以便这些行的要害计算的相同值存储在相同的位置。
只有那种数据量超大的数据库才会用到
只有那种数据量超大的数据库才会用到. 表散列与水平分割相似,但没有水平分割那样的明显分割界限, 它由哈希函数和键值决定一条记录的保存文件,这样是为了IO更加均衡。
水平分区将表分为多个表。每个表包含的列数相同,但是行更少。例如,可以将一个包含十亿行的表水平分区成 12 个表,每个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需引用相应月份的表。
而垂直分区则是将原始表分成多个只包含较少列的表。
表散列与水平分割相似,但没有水平分割那样的明显分割界限,
现在要开发一个评论系统,由于考虑到数据量会很大,希望用一个hash算法,把数据分散到多个表中。请大家给一个好的hash算法
对hash算法的要求:
开始可能只使用3张表存放数据,但以后会扩展到5到10张表,这个hash算法要考虑到增加新的表的情况。
我正好也在研究这个问题哈哈
在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,看你使用了什么样的DB,就参考相应的解决方案来实施即可。
集群通常会使用CDN与GSBL与DNS负载均衡技术,每个地区一组前台服务器群,例如:网易,百度使用了DNS负载均衡技术,每个频道一组前台服务器,一搜使用了DNS负载技术,所有频道共用一组前台服务器集群。
网站使用基于Linux集群的负载均衡,失败恢复,包括应用服务器和数据库服务器,基于linux-ha的服务状态检测及高可用化。
应用服务器集群可以采用apache+tomcat集群和weblogic集群等;web服务器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;Squid也可以,方法很多,可以根据情况选择。
上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。
数据库中的散列法是使用计算值来分配表格数据的方法,它比在整个索引中搜索要好的多。一个哈希散列允许你在数据库表格中存储数据,以便这些行的关键计算的相同值存储在相同的位置。
为了在哈希散列中找到一个行,查询机应用哈希函数到一个行的关键值,然后分配和那个值相关的数据块。在很多情况下,一个哈希散列比一个普通的索引快。
Oracle在Oracle 7面世的时候就支持哈希散列。哈希散列的优势仅仅在于当表格的访问在关键值上首先使用的是=操作符,这个表格是静态的,并且仅仅当数据行需要的时候。当和一个普通非索引或者散列表格比较的时候,全表扫描就会变慢。
比如,假设你想要创建一个表格来查找英语单词的发音。你需要迅速的分配一个英语单词的发音,但是一个字典,比如cmudict0.3有大概106,000个单词。
创建哈希散列最大的工作任务就是分析参数。你需要计算分析每个散列的带和散列关键字包含的内容数量。如果三类是正整数,那么你可以设置最小值的大小如果你需要定义自己哈希函数。
对于任何其他类型的数据,比如下面这个列子,你需要计算参数的最小大小。你可以通过使用DBMS_UTILITY.GET_HASH_VALUE函数来获得一个确切的估计。
create table cmudict
(
word varchar2(22) primary key,
pron varchar2(62)
);
使用其他的快速装入程序比如SQL*来装入这些数据:
select max(blksize)
from (select sum(3+nvl(vsize(word),0)+1+nvl(vsize(pron),0)+1) blksize
from cmudict group by dbms_utility.get_hash_value(word,1,10007)) blkqry;
NVL(VSIZE(col),0)+1表达式使用每个栏来分析字节的数字。3+是行的开销,所以表达式的总和是存储每个行所需要的大小。在每个哈希函数组中,求和行的大小,我们获得每个散列数据块所许哟啊的字节数量。1是真的不切实际,但是10007,一个质数,是对哈希关键字参数的最好猜测。
增加或者减少这个值到另外一个质数知道上面的分析结果降低数据块大小的重要性。这些数字,分析的结果和GET_HASH_VALUE的第三个参数应该被使用来创造散列。
现在你可以创造一个散列并使用这个散列存储数据再创建一个表格。
create cluster cmudict_cluster (word varchar2(22))
size 6000
single table
hashkeys 739;
create table cmudict
(
word varchar2(22) not null,
pron varchar2(62)
)
cluster cmudict_cluster(word);
如果你需要分析这个散列:
analyze cluster cmudict_cluster compute statistics;
select * from user_clusters where cluster_name = 'CMUDICT_CLUSTER';
你可以看到AVG_BLOCKS_PER_KEY 是 1.
可以为查询语句做注解select * from cmudict where word = 'HELLO' returns:
SELECT STATEMENT
TABLE ACCESS HASH
CMUDICT
数据库中的散列法是使用计算值来分配表格数据的方法,它比在整个索引中搜索要好的多。一个哈希散列答应你在数据库表格中存储数据,以便这些行的要害计算的相同值存储在相同的位置。
只有那种数据量超大的数据库才会用到
发表评论
-
基于Hash算法的Mysql分表处理
2015-10-29 00:58 553下面为您介绍的Mysql ... -
mysql大数据高并发处理
2015-10-26 22:00 395一、数据库结构的设计 ... -
优化SQL查询:如何写出高性能SQL语句
2015-10-17 17:41 414优化SQL查询:如何写出高性能SQL语句 这个问题 ... -
MySqL性能优化
2015-09-06 21:26 0I 硬件配置优化 Ø CPU选择:多核 ... -
Mysq日志管理(错误日志、查询日志、慢查询日志)
2015-09-06 21:01 0错误日志 记录内容:包含了当mysqld启动和停止时,以及服 ... -
MySql均衡负载
2015-09-06 21:01 01) 利用mysql 复制分流查询操作 利用mysql的主从复 ... -
如何减少对Mysql的访问以优化SQL语句
2015-09-06 21:00 0避免对同一数据做重复 ... -
使用mysql连接池提高性能
2015-09-06 20:59 0对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建 ... -
Mysql锁的优化
2015-09-06 20:59 0获取锁等待情况 可以 ... -
Mysql数据表的优化
2015-09-26 22:26 404优化表的数据类型 表需要使用何种数据类型,是需要根据应用来判 ... -
调整Mysql中insert、update、delete的顺序来以提高效率
2015-09-26 22:26 579MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的 ... -
Mysql join语句的优化
2015-09-26 22:25 305Mysql4.1开始支持SQL的子查询。这个技术可以使用SEL ... -
Mysql order by语句的优化
2015-09-19 11:56 373在某些情况中,MySQL可以使用一个索引来满足ORDER BY ... -
Mysql group by语句的优化
2015-09-13 16:01 354默认情况下,MySQL排序所有GROUP BY col1, c ... -
Mysql insert语句的优化
2015-09-08 22:59 3181) 如果你同时从同一客户插入很多行,使用多个值表的INSER ... -
Mysql大量插入数据时SQL语句的优化
2015-09-11 22:00 4351) 对于Myisam类型的表,可以通过以下方式快速的导入大量 ... -
Mysql索引优化教程
2015-09-08 22:59 388索引的存储分类 myisam表的数据文件和索引文件是自动分开 ... -
Mysql下优化SQL的一般步骤
2015-09-07 11:50 315通过show status和应用特点了解各种SQL的执行频率 ... -
Mysql SQL Mode详解
2015-09-07 11:50 436Mysql SQL Mode简介 MySQL服务器能够工作在 ... -
Mysql使用SQL的安全问题,Mysql防止SQL注入
2015-09-07 11:50 381SQL注入简述 SQL Injection ...
相关推荐
数据库水平拆封和库表散列1
Redis散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,也就是说,散列类型不能嵌套...
数据库表分割技术包含以下内容:水平分割/垂直分割/库表散列.接下来将对以上分割进行详细介绍,感兴趣的朋友可以了解下,对你日后维护数据库是很有帮助的
Matlab实现音乐散列和track db匹配算法 项目结构 目标文件夹:在此处放置将形成曲目数据库的曲目列表。 hashes.mat:存储数据库的 Matlab 文件。由 Matlab 执行add_tracks()函数后生成。 查询文件夹:将曲目片段...
分布式分区视图 分布式分区视图允许用户将大型表中的数据分散到不同机器的数据库上,用户不需要知 道直接访问哪个基础表而是通过视图访问数据,在开发上有一定的透明性。但是并没有 简化分区数据集的管理、设计。...
数据库系统原理与应用-索引和散列技术
类别 3.1 关系群集、表、视图 群集 user_clusters 群集 user_cluster_hash_expressions 群集使用的群集散列函数 user_clu_columns 表列到群集列的映射(无all_*) 表和视图 user_tables 关系表 user_all_tables 表...
请参阅使用中的,,和。动机使用像MongoDB这样的NoSQL数据库开发项目时会存在一些风险。 第一个关于URL,另一个关于req.body的内容。 (由允许的用户发送数据) 网址风险如果恶意用户试图入侵您的数据库,那么对...
第3部分:模式对象,内容包括管理模式对象空间、管理表、管理索引、管理分区表和分区索引、管理簇、管理散列、管理视图、序列和同义词、模式对象的常规管理、检测和修复数据块损坏。第4部分:数据库的安全,介绍...
数据库系统教学课件:第11讲-物理设计(索引与散列).ppt
关系型数据库中,不同表的记录通常具有不同的⼤⼩,这时数据库可以选择映射到多个⽂件中,同⼀⽂件中只存储固定长度的记录;也可以 构建特殊的⽂件,⽀持容纳不定长度的记录。很显然,后者实现起来更复杂。 2.1 定...
第5章 数据库的存储结构2012. 03目录 Contents5.1 数据库存储结构多级存储物理结构逻辑结构5.2 关系数据库中表的典型存储机制索引散列簇集5.
04第4章 索引与散列.ppt 05第5章 查询处理.ppt 06第6章 查询优化.ppt 07第7章 事务.ppt 08第8章 并发控制.ppt 09第9章 恢复系统.ppt 10第10章 数据库系统体系结构.ppt 11第11章 分布式数据库.ppt 12第12章 并行...
插件旨在简化在数据库中保存散列密码的过程。 模式示例 以这个模式为例: var mongoose = require ( 'mongoose' ) ; var hashedField = require ( 'mongoose-hashed-plugin' ) ; var UserSchema = new mongoose ....
杜金莲教授分布式数据库实战视频教程 高级数据库视频教程课程主要讲解查询处理及优化,数据管理与恢复技术,事务并发调度,基于封锁的并发控制机制,并发控制的其他机制课程目录:<第1讲 数据文件的组织与索引技术>...