Entry

HBase原理——要弄懂的sequenceId

馋奶兔 提交于 2020-10-17 08:17:09
转自:https://www.jianshu.com/p/e5a88fc57fce 为什么需要sequenceId? HBase数据在写入的时候首先追加写入HLog,再写入Memstore,也就是说一份数据会以两种不同的形式存在于两个地方。那两个地方的同一份数据需不需要一种机制将两者关联起来?有的朋友要问为什么需要关联这两者,那笔者这里提出三个相关问题: 1. Memstore中的数据flush到HDFS文件中后HLog对应的数据是不是就可以被删除了?不然HLog会无限增长!那问题来了,Memstore中被flush到HDFS的数据,如何映射到HLog中的相关日志数据? 2. HBase中单个HLog都有固定大小,日志文件最大个数也是固定设置的,默认最大HLog文件数量为8。如果日志数量超过这个数量,就必须删除最老的HLog日志。那问题来了,如何知道待删除HLog日志对应的所有数据都已经落盘了?(如果知道哪些数据没有落盘,就可以强制对其执行flush,之后就可以将HLog删除) 3. RegionServer宕机之后Memstore中数据必然会丢失,大家都知道可以通过HLog进行恢复。那问题来了,HLog中哪些数据需要恢复?哪些不需要恢复? 这三个问题从本质上来讲是一个问题,都需要一种介质来表示Memstore中数据Flush的那个点对应HLog哪个位置

图解LinkedHashMap原理

旧城冷巷雨未停 提交于 2020-10-17 07:25:46
1 前言 LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇: 图解HashMap原理 2 LinkedHashMap使用与实现 先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟: LinkedHashMap结构.png 2.1 应用场景 HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map < String , String > hashMap = new HashMap < String , String > ( ) ; hashMap . put ( "name1" , "josan1" ) ; hashMap . put ( "name2" , "josan2" ) ; hashMap . put ( "name3" , "josan3" ) ; Set < Entry < String , String >> set = hashMap . entrySet ( ) ; Iterator < Entry < String , String >> iterator = set . iterator ( ) ; while ( iterator . hasNext ( ) ) { Entry entry =

Map文件解析-2

前提是你 提交于 2020-10-16 08:45:14
本期介绍后两种类型 1、Memory Map of the image 内存(映射)分布 各部分解析: 1)Image Entry point : 0x08000131:指映射入口地址。 2)Load Region ROM (Base: 0x00008000, Size: 0x00000ec0, Max: 0xffffffff, ABSOLUTE): 指加载区域位于ROM开始地址0x00008000,大小有0x00000ec0,这块区域最大为0xffffffff。 执行区域: Execution Region ER_RO Execution Region ER_RM 这个区域,其实就是对应我们目标配置(Project -> Options for Target -> Target)中的配置。 3)Base Addr:存储地址 4)Size:存储大小 5)Type:类型 Data:数据类型 Code:代码类型 Zero:未初始化变量类型 PAD:补充类型。ARM处理器是32位的,如果定义一个8位或者16位变量就会剩余一部分,PAD就是指“补充”的部分。 6)Attr:属性 RO:存储与ROM中的段 RW:存储与RAM中的段 7)Section Name:段名 也可以说为入口分类名,与第1部分“Section Cross References”指的模块、段一样。 大概包含:RESET、

HashMap源码实现分析

杀马特。学长 韩版系。学妹 提交于 2020-10-15 20:58:14
HashMap源码实现分析 一、前言 HashMap 顾名思义,就是用hash表的原理实现的Map接口容器对象,那什么又是hash表呢。 我们对数组都很熟悉,数组是一个占用连续内存的数据结构,学过C的朋友对这一点影响肯定更为深刻。既然是一段连续的内存,数组的特点就显而易见了,一旦你知道要查第几个数据,时间复杂度就是O(1),但是对于插入操作就很困难;还有一种数据结构你也一定很熟悉,那就是链表,链表由一组指向(单向或者双向)的节点连接的数据结构,它的特点是内存不连续,查找困难,但是插入删除都很容易。 那有没有一种查找容易,插入删除查找都容易的数据结构呢, 没错,它就是hash表。 本篇,我们就来讨论: HashMap的数据结构实现方式 HashMap是怎么做到为get、put操作提供稳定的时间复杂度的 HashMap什么时候从单节点转成链表又是什么时候从链表转成红黑树 HashMap初始化时为什么要给自定义的初始容量。 HashMap如何保证容量始终是2的幂 HashMap为何要保证容量始终是2的幂 HashMap的hash值如何计算 HashMap为什么是线程不安全的 要了解HashMap 最好的方式就是看源码,本篇内容基于Jdk1.8HashMap源码。 二、HashMap的基本要素 磨刀不误砍柴功,想了解HashMap的原理,必然绕不过HashMap源码中的以下几个变量:

JAVA基础——Map集合,Map集合特点,根据键找值,寻找键和值,HashMap,TreeMap,LinkedHashMap的基本功能,hashtable与hashMap区别

China☆狼群 提交于 2020-10-15 18:40:53
一、 Map集合概述和特点 Map接口概述 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构(TreeMap,hashMap)值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 二、 Map集合的功能概述 1. 添加功能 V put(K key,V value) :添加元素。 如果键是第一次存储,就直接存储元素,返回null 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值 Map < String , Integer > map = new HashMap < String , Integer > ( ) ; //put的返回值是根据后面的值的类型相同 Integer i1 = map . put ( "张三" , 13 ) ; Integer i2 = map . put ( "李四" , 15 ) ; Integer i3 = map . put ( "王五" , 14 ) ; Integer i4 = map . put ( "赵六" , 16 ) ; Integer i5 = map . put ( "张三" , 16 ) ; /

聊聊claudb的zset command

拥有回忆 提交于 2020-10-12 11:31:54
序 本文主要研究一下zset command SortedSetAddCommand claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/zset/SortedSetAddCommand.java @Command("zadd") @ParamLength(3) @ParamType(DataType.ZSET) public class SortedSetAddCommand implements DBCommand { @Override public RedisToken execute(Database db, Request request) { try { DatabaseValue initial = db.getOrDefault(safeKey(request.getParam(0)), DatabaseValue.EMPTY_ZSET); DatabaseValue result = db.merge(safeKey(request.getParam(0)), parseInput(request), (oldValue, newValue) -> { Set<Entry<Double, SafeString>> merge = new SortedSet(); merge.addAll

在视图控制器之间传递数据

梦想的初衷 提交于 2020-10-12 05:42:20
问题: I'm new to iOS and Objective-C and the whole MVC paradigm and I'm stuck with the following: 我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: I have a view that acts as a data entry form and I want to give the user the option to select multiple products. 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项。 The products are listed on another view with a UITableViewController and I have enabled multiple selections. 这些产品在另一个带有 UITableViewController 视图中列出,并且我启用了多个选择。 My question is, how do I transfer the data from one view to another? 我的问题是,如何将数据从一个视图传输到另一个视图? I will be holding the selections on the UITableView in an array,

深入理解ThreadLocal

 ̄綄美尐妖づ 提交于 2020-10-11 00:26:56
存储结构 threadLocal存储于Thread类上的ThreadLocalMap类型的threadLocals中。 从ThreadLocalMap的名字上可以看出其结构类似于HashMap,它也是使用key-value结构的Entry数组table来存储ThreadLocal和值。 但区别在于Entry继承于WeakReference,key使用弱引用,其好处在于当threadlocal没有强引用时,key将在下一次gc中被回收,但仅仅key被回收,value不会被回收,这就是ThreadLocal会导致内存泄漏的原因,但ThreadLocal也有一些机制去处理这种情况,后续会说。 还有一种区别在于解决hash冲突的方式,HashMap是使用数组+链表,即拉链法来解决的,而ThreadLocalMap使用线性探测法,即当前位置冲突,探测下一个地址是否冲突,不冲突插入。 set过程 首先是获取thread上的ThreadLocalMap public void set(T value) { //1.获取当前线程 Thread t = Thread.currentThread(); //2.获取线程上的ThreadLocalMap ThreadLocalMap map = getMap(t); if (map != null) //3.1

verilog写的LCD1602 显示

谁说胖子不能爱 提交于 2020-10-10 00:31:24
在读本文之前,请先阅读 LCD1602 的 datasheet(百度到处都是) ,熟悉有关的11条指令集。 LCD1602的11个指令集链接 http://www.cnblogs.com/aslmer/p/5801363.html (这是我总结的11条指令集,中英文结合) 1、LCD1602基础知识 (2)LCD1602操作流程 2、代码: module lcd_1602_driver( clk , rst_n , lcd_en , lcd_rw , //因为只执行写操作,所以永远为0. lcd_rs , lcd_data ); input clk ; input rst_n ; output lcd_en ; output lcd_rw ; output lcd_rs ; output [7:0] lcd_data; wire clk ; wire rst_n ; wire lcd_en ; wire lcd_rw; reg [7:0] lcd_data; reg lcd_rs ; reg [5:0] c_state ; reg [5:0] n_state ; wire [127:0] row_1; wire [127:0] row_2; assign row_1 ="i am liu xiao yi" ; //第一行显示的内容 assign row_2 ="happy

BookKeeper 原理浅谈

梦想与她 提交于 2020-10-08 04:15:48
接着之前的一篇文章 BookKeeper 集群搭建及使用 ,本文是 BookKeeper 系列的第二篇,短期来看应该也是最后一篇,本篇文章主要聚焦于 BookKeeper 内核的实现机制上,会从 BookKeeper 的基本概念、架构、读写一致性实现、读写分离实现、容错机制等方面来讲述,因为我并没有看过 BookKeeper 的源码,所以这里的讲述主要还是从原理、方案实现上来介绍,具体如何从解决方案落地到具体的代码实现,有兴趣的可以去看下 BookKeeper 的源码实现。 BookKeeper 基础 正如 Apache BookKeeper 官网介绍的一样:A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads。BookKeeper 的定位是一个可用于实时场景下的高扩展性、强容错、低延迟的存储服务。 Pulsar-Cloud Native Messaging & Streaming - 示说网 中也做了一个简单总结: 低延迟多副本复制:Quorum Parallel Replication; 持久化:所有操作保证在刷盘后才 ack; 强一致性:可重复读的一致性(Repeatable Read Consistency); 读写高可用; 读写分离。