- 浏览: 50297 次
- 性别:
文章分类
- 全部博客 (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 583下面为您介绍的Mysql ... -
mysql大数据高并发处理
2015-10-26 22:00 428一、数据库结构的设计 ... -
优化SQL查询:如何写出高性能SQL语句
2015-10-17 17:41 447优化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 435优化表的数据类型 表需要使用何种数据类型,是需要根据应用来判 ... -
调整Mysql中insert、update、delete的顺序来以提高效率
2015-09-26 22:26 621MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的 ... -
Mysql join语句的优化
2015-09-26 22:25 347Mysql4.1开始支持SQL的子查询。这个技术可以使用SEL ... -
Mysql order by语句的优化
2015-09-19 11:56 404在某些情况中,MySQL可以使用一个索引来满足ORDER BY ... -
Mysql group by语句的优化
2015-09-13 16:01 387默认情况下,MySQL排序所有GROUP BY col1, c ... -
Mysql insert语句的优化
2015-09-08 22:59 3461) 如果你同时从同一客户插入很多行,使用多个值表的INSER ... -
Mysql大量插入数据时SQL语句的优化
2015-09-11 22:00 4741) 对于Myisam类型的表,可以通过以下方式快速的导入大量 ... -
Mysql索引优化教程
2015-09-08 22:59 418索引的存储分类 myisam表的数据文件和索引文件是自动分开 ... -
Mysql下优化SQL的一般步骤
2015-09-07 11:50 349通过show status和应用特点了解各种SQL的执行频率 ... -
Mysql SQL Mode详解
2015-09-07 11:50 471Mysql SQL Mode简介 MySQL服务器能够工作在 ... -
Mysql使用SQL的安全问题,Mysql防止SQL注入
2015-09-07 11:50 405SQL注入简述 SQL Injection ...
相关推荐
数据库水平拆封和库表散列1
库表散列是一种混合了水平分割和散列的技术,它基于特定的哈希算法,将数据均匀分布到多个表或数据库中。例如,用户表可以按照用户ID进行哈希散列,使得每个用户的数据存储在特定的表中。这种方式可以实现更细粒度...
散列表(哈希表)是一种通过散列函数将键映射到数组索引的数据结构,用于快速查找。散列函数将键转换为数组下标,理想情况下,不同的键应映射到不同的下标,以避免冲突。然而,实际应用中总会存在冲突,因此需要解决...
散列,又称哈希或哈希函数,是计算机科学中的一种重要技术,广泛应用于数据结构、信息安全、数据库等领域。在给定的“sanlie.rar_散列”压缩包中,可能包含了一个实现散列功能的程序,用于处理散列文件的插入、删除...
本章节主要介绍数据库系统原理与应用中的索引和散列技术。索引技术是数据库系统中的一种重要技术,它可以快速地检索数据,提高数据库系统的性能。散列技术是另一种重要技术,它可以快速地定位数据的存储位置,提高...
在Oracle数据库中,为了获取来自多个表的数据,我们需要使用不同的连接方式来实现这一目的。本文将详细介绍三种主要的表连接方式:嵌套循环连接(Nested Loop Join,简称NL Join)、排序合并连接(Sort Merge Join,...
Redis散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,也就是说,散列类型不能嵌套...
库表散列是根据业务逻辑,将数据分散到多个数据库或表中,如按用户ID进行散列,以降低成本并提升系统性能。例如,搜狐论坛的帖子和用户信息就进行了数据库分离和散列。 4. **缓存**:缓存技术能显著提高网站响应...
【数据库大表优化】主要涉及两个关键概念:蔟表(Clustered Tables)和表分区(Table Partitioning),这两种策略都是为了提升大型数据库的性能和管理效率。 蔟表和蔟索引是Oracle数据库特有的优化手段。蔟表的核心...
Matlab实现音乐散列和track db匹配算法 项目结构 目标文件夹:在此处放置将形成曲目数据库的曲目列表。 hashes.mat:存储数据库的 Matlab 文件。由 Matlab 执行add_tracks()函数后生成。 查询文件夹:将曲目片段...
这两种散列算法都是将明文密码转换为固定长度的散列值,然后将这些散列值存储在SAM数据库中。 #### 加密解密算法 SAM在处理用户登录请求时,会使用特定的算法对密码进行加密解密。这其中包括了DES(Data ...
在数据库管理中,索引和散列是两种重要的数据组织方式,它们在提升查询速度和优化数据访问方面发挥着关键作用。 **1. 索引的基本概念** 索引分为两种基本类型:顺序索引和散列索引。 - **顺序索引**:基于数据的...
在本话题中,我们将深入探讨哈希表法如何实现散列以及再散列,同时以C++为编程语言进行实例解析。 首先,理解哈希函数是关键。哈希函数的目标是将任意大小的输入(如电话号码)转化为固定大小的输出(通常是数组的...
本压缩包文件“从Mysql数据库中导出表结构信息到Excel中.zip”显然涉及到两个关键知识点:如何从Mysql数据库导出表结构,并将这些信息转换成Excel格式。 首先,我们来看如何从Mysql数据库导出表结构信息。这通常...
Oracle数据库的分区表是针对大数据量管理的一种高效策略,它能够显著提升查询性能,提高数据的可用性和维护的便捷性。在大型企业应用或数据库系统中,面对GB、TB级别的数据,分区技术成为必不可少的优化手段。 使用...
模式在Oracle数据库中扮演着至关重要的角色,它是一组逻辑数据结构或对象的集合,用于组织和维护表、视图、索引等数据库对象。每个模式与一个数据库用户相对应,这意味着一个模式只能被一个特定的数据库用户拥有,且...
Oracle数据库中的表连接是数据库查询中的核心操作,它允许从多个表中合并数据,以满足复杂的业务需求。Oracle数据库提供了多种连接方法,包括嵌套循环连接、排序合并连接、集群连接、笛卡尔连接和散列连接,以及特定...
标题中的“行业分类-设备装置-用于使用距离关联性散列法对媒体数据库定址的系统和方法”表明,这是一个关于信息技术,特别是数据库管理和检索技术的专题。这种技术可能涉及计算机硬件、软件以及数据处理策略,主要...
本文是数据库性能调优技术系列的第四篇文章,旨在深入探讨散列连接在Oracle数据库中的运用及其原理。在上一篇中,我们详细讨论了嵌套循环连接执行计划,并提到了连接操作的三种主要类型:嵌套循环连接、散列连接以及...