hash

数据仓库实践杂谈(十)——拉链处理

眉间皱痕 提交于 2020-01-21 09:21:25
[目录] 第一章:概述 第二章:整体数据分层 第三章:整体实现框架 第四章:元数据 第五章:ETL 第六章:数据校验 第七章:数据标准化 第八章:去重 第九章:增量/全量 第十章:拉链处理 第十一章:分布式处理增量 第十二章:列式存储 第十三章:逻辑数据模型(数仓模型) 第十四章:数据模型参考 第十五章:维模型 第十六章:渐变维 第十七章:数据回滚 第十八章:关于报表 第十九章:数据挖掘 数据仓库实践杂谈(十)——拉链处理 现代业务系统处理的数据越来越大,尤其大型金融机构、电商平台等,账户表,订单表都是庞大的。数据仓库要保留历史变更情况,需要每天加载当天的变更数据到仓库。相比整个全量数据来说,每天变化的数据还是属于少数的。比如千万账户级别的银行每天交易量一般也就是几十万条,也就意味着账户表中涉及变动的记录最多也就是几十万条。电商订单表可能数千万条,但每天新增以及之前订单变化的,可能不到一百万条。这种情况下,拉链方式做增量存储是最合适的方法。 考虑到大部分源系统只是单纯的交易系统,并不会预先做增量的处理。所以,往往我们面对的场景是源系统每天给一份当前系统的快照(包含所有或者有效时间内的订单),这里面有大量没有被修改以及小部分被修改过的、新增数据。这样我们需要做的事情就有两件: 找出增量(新增、变化)的数据; 把增量数据追加到历史库中。 考虑历史数据库的存储情况

存储系统科普——分布式存储系统解决方案介绍

这一生的挚爱 提交于 2020-01-21 07:45:05
简介 该篇blog只是存储系列科普文章中的第四篇,所有文章请参考: 博客所有文章 在工程架构领域里,存储是一个非常重要的方向,这个方向从底至上,我分成了如下几个层次来介绍: 硬件层:讲解磁盘,SSD,SAS, NAS, RAID等硬件层的基本原理,以及其为操作系统提供的存储界面; 操作系统层:即文件系统,操作系统如何将各个硬件管理并对上提供更高层次接口; 单机引擎层:常见存储系统对应单机引擎原理大概介绍,利用文件系统接口提供更高级别的存储系统接口; 分布式层:如何将多个单机引擎组合成一个分布式存储系统; 查询层:用户典型的查询语义表达以及解析; 分布式系统主要分成存储模型和计算模型两类。本文主要描述的是存储模型的介绍。其中计算模型的分布式系统原理跟存储模型类似,只是会根据自身计算特点加一些特殊调度逻辑进去。 分布式层 分布式系统简介 任何一个分布式系统都需要考虑如下5个问题: 数据如何分布 就像把鸡蛋放进篮子里面。一般来说篮子大小是一样的,当然也有的系统支持不一样大小的篮子。鸡蛋大小也不一样,有很多系统就把鸡蛋给"切割"成一样大小然后再放。并且有的鸡蛋表示对篮子有要求,比如对机房/机架位的要求。 衡量一个数据分布算法好不好就看他是否分得足够均匀,使得所有机器的负载方差足够小。 如何容灾 分布式系统一个很重要的定位就是要让程序自动来管机器,尽量减少人工参与

Different SHA1 Hash result between Java and C#

青春壹個敷衍的年華 提交于 2020-01-21 03:44:04
问题 I've a big problem. I using this C# function to encode my message: byte[] buffer = Encoding.ASCII.GetBytes(file_or_text); SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider(); String hashText = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", ""); On java side, I use this snippet: MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] sha1hash = new byte[40]; md.update(text.getBytes("iso-8859-1"), 0, text.length()); sha1hash = md

HashMap源码分析(一)

社会主义新天地 提交于 2020-01-20 23:26:03
基于JDK1.7 HashMap源码分析 概述 HashMap是存放键值对的集合,数据结构如下: table被称为桶,大小(capacity)始终为2的幂,当发生扩容时,map容量扩大为两倍 HashMap采用拉链法解决Hash冲突,发生冲突时,新元素采用头插法插入到对应桶的链表中 HashMap有几个重要字段: size:HashMap键值对的数量 capacity:桶数量,即table.length,默认16 loadFactor:负载因子,度量负载程度,基于时间和空间的权衡,默认0.75 threshold:阈值,当 size>=threshold 将发生扩容, threshold=capacity * loadFactor 。 JDK1.7 源码分析 属性 /** * 默认初始容量 (必须是2的幂) */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * 最大容量 */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * 默认负载因子 */ static final float DEFAULT_LOAD_FACTOR = 0.75f; /** * 空表 */ static final Entry<?,?>[] EMPTY_TABLE = {

Locality Sensitive Hash Implementation? [closed]

做~自己de王妃 提交于 2020-01-20 14:23:44
问题 As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 7 years ago . Are there any relatively simple to understand (and simple to implement) locality-sensitive hash examples in C/C++/Java/C#? I'd like to

Locality Sensitive Hash Implementation? [closed]

巧了我就是萌 提交于 2020-01-20 14:23:05
问题 As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 7 years ago . Are there any relatively simple to understand (and simple to implement) locality-sensitive hash examples in C/C++/Java/C#? I'd like to

存储引擎-Bitcast

眉间皱痕 提交于 2020-01-20 00:45:56
Bitcast是一种日志型的基于hash表结构的健值对的存储系统,最早追溯于Riak分布式数据库。 目前,Berkeley DB,Tokyo Cabinet,Innostore都使用了这种存储引擎。使用这种引擎拥有以下优点: 比较低的读写时延。 比较高的随机写吞吐率。 能够控制更大的数据库。 容易备份和恢复。 相对简单,容易理解。 可预计的高访问压力情况。 Bitcast只支持追加操作(Append-only),即所有的写操作只追加而不修改老的数据,每个文件都有一定的大小限制,当文件增加到相应的大小,就会产生一个新的文件,老的文件只读不写。在任意时刻,只有一个文件是可写的,用于追加数据,被称为活跃数据文件(active data file)。而其它已经达到大小限制的文件,被称为(older data file)。 活跃数据文件仅支持追加写入,因此所有的写入操作都是串形化的而不用磁盘随机定位。写入的健值对格式如下: 健值对的删除也是追加写的方式写入活动数据文件中,真正的删除会在下一次的数据合并中进行, 合并操作是定时对所有的旧数据文件进行扫描并生成新的数据文件(其本质是将同一个Key的多个操作进行合并。) 在Bitcast模型中,使用了Hash表的索引结构。除了存储在磁盘的数据文件,还有内存中的Hash表,通过Hash表中的key值可以快速地定位到磁盘中的数据。大致结构如下图所示:

关于shell中的hash缓存

久未见 提交于 2020-01-19 23:30:02
shell里执行的命令有两种:     内部命令(由shell自带)         help:内部命令列表         enable cmd:启用内部命令         enable -n cmd:禁用内部命令         enable -a:查看所有启用的内部命令     外部命令:外部可执行程序文件         which cmd:查看命令文件路径,列出首次匹配的路径         which -a cmd:打印所有匹配路径         which cmd --skip-alias cmd:打印除去别名的命令路径         whereis:查找文件或目录     查看命令类型:type command Hash缓存表 系统初始Hash表是空的,如果系统重启也会清空,当外部命令执行是会到PATH里找该命令,然后记录在Hash里,当再执行时就到Hash里取,这样会加快执行速度。 Hash常见用法 hash 显示hash缓存 hash -l 显示hash缓存,包含hash别名 hash -p path name 给path起别名为name hash -t name 打印name的path hash -d name 清除name缓存 hash -r 清除所有缓存 shell搜索命令路径的先后顺序:别名->内部命令->Hash存储路径->硬盘里的路径 来源:

前端跨域总结

不打扰是莪最后的温柔 提交于 2020-01-19 16:20:37
1.跨域的定义 只要协议、域名、端口有任何一个不同,就会被当做为不同的域,如果从A域名访问B域名上的资源就叫做跨域。 下面我们来看下几种跨域的方法: 2.document.domain 浏览器的同源策略有一些限制,第一,不能通过ajax方法去请求不同源的资源;第二,浏览器中不同域的框架之间是不能进行JS交互的。假如有一个页面A,地址是 http://www.domain.cn/A.html ,在这个页面里有个iframe,它的地址是 http://domain.cn/B.html, 显然A和B是不同域的,所以我们没法通过JS来访问iframe中的数据和方法。 这种情况就就可以用document.domain来解决。 解决方法就是把 http://www.domain.cn/A.html 和 http://domain.cn/B.html 的document.domain设成相同的域名,需要注意的是, 我们只能把document.domain设置成自身或更高一级的父域,且主域必须相同。 在A中我们把设置document.domain: <iframe id = "iframe" src="http://domain.cn/B.html" onload = "test()"></iframe> <script type="text/javascript"> document

ConcurrentHashMap源码详解(与HashMap/HashTable的比较)

前提是你 提交于 2020-01-19 09:33:00
先看看速度比HashTable快又比HashMap线程安全的------当红明星ConcurrentHashMap具体使用方法: 非常的平淡无奇,跟HashMap和HashTable好像是一样东西。 但是,ConcurrentHashMap其实是融合了HashMap/HashTable这两种Hash表数据结构的优点。我们看源码可以知道: HashTable全部操作方法都是用Java 中自带的synchronized锁强制做同步达到线程安全的,不管是get还是put还是其他一些方法。 而HashMap就没考虑那么多,它的方法中全部没做线程安全锁处理。具体详细的HashMap介绍请看另外一篇博文: https://blog.csdn.net/whiteBearClimb/article/details/103946465 因此我们可以得出结论就是HashMap速度快但是线程不安全;HashTable速度慢但是线程安全。 ConcurrentHashMap就是融合它们二者各自的优点。既是线程安全的,速度又相对能较快。那么是怎么实现的呢?看源码: 继续进去ConcurrentMap看看什么个东西 这些毫无疑问没啥好讲的,我们再看看它最常用的几个方法有什么不同点。 Get方法: Put方法: 这里如果有仔细看过HashMap代码的人瞬间就恍然大悟了,没看过的打开:::https://blog