Russ Xia Blog

身处寒夜,把握星光。

ConcurrentHashMap的高并发和线程安全

ConcurrentHashMap的数据结构和线程安全实现

为什么需要ConcurrentHashMap 在不需要线程安全的情况下,HashMap可以轻松满足我们的日常需求。但是HashMap是线程不安全的,在jdk1.8之前,多线程并发调用put方法,引发扩容,触发resize的过程,因为是链表的关系,甚至有几率形成死循环。(参考资料)。jdk1.8中,采用了复制的方法,而不是操作原链,不会再出现死循环的情况。 HashMap并不是并发容器,在并...

HashMap中的Hash冲突解决和扩容机制

解决Hash冲突的常见实现方法,HashMap的解决冲突和扩容机制

关于HashMap HashMap根据key的hash值来存储数据,HashMap最多只允许一个key为null的记录。HashMap是线程不安全的。HashMap的数据结构是:数组+链表+红黑树(JDK1.8增加了红黑树部分)。 HashMap中的几个关键属性如下: //hash表 transient Node<K,V>[] table; trans...

TreeSet、HashSet、LinkedHashSet的区别

三个Set的区别和代码实现

Set接口 TreeSet、HashSet、LinkedHashSet都实现了Set接口。Set接口和List接口一样继承自Collection接口。 List和Set的区别 关于list,jdk中的描述是这样的:An ordered collection (also known as a <i>sequence</i>).Unlike sets, lists t...

Hive中遇到过的问题

Hive中遇到过的问题

一、MR任务在Shuffle过程时报错 Ended Job = job_1556157715460_0029 with errors Error during job, obtaining debugging information... Examining task ID: task_1556157715460_0029_m_000000 (and more) from job job_1...

数据仓库中的数据分层

为什么要分层以及如何分层

为什么需要数据分层? 分层最主要的目的还是为了更好的管理和使用数据。具体来讲的话,还分为以下原因: 高效:多层次的数据模型,可以避免直接使用操作性数据 减少重复开发,易维护:能缩短获取信息的时间,清晰的分层,也使得维护变得更容易。 易于分解问题:每一层只关注本层的职能,比较简单和容易理解,也便于维护数据的准确性。 如何分层 一般分层为:ODS/[DWD]-[-MID]-DW...

Hive-QL的查询调优

HQL的EXPAIN

EXPLAIN 官方wiki地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain explain命令的输出包括两个部分,STAGE DEPENDENCIES 和 STAGE PLANS 。其中 ABSTRACT SYNTAX TREE 在2.1.0中已经被移除了,并打算作为 explain ast...

Hive-QL中的查询

Hive-QL中的JOIN查询、子查询以及order by、sort by、distirbute by、cluster by等

Join 在大多数SQL中,会先执行join操作,然后再将结果通过where语句进行过滤。 例如,select s.ymd,s.symbol,s.price_close,d.dividend from stocks s left join dividends d on s.ymd=d.ymd and s.symbol=d.symbol where s.symbol='APPL' and ...

Elasticsearch中遇到的问题汇总

Elasticsearch中遇到的问题汇总

一、聚合操作时,报Fielddata is disabled on text fields by default. 报错操作 GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": {"field": "interests" } } } } 错误reponse: { ...

Elasticsearch中的并发控制

常见的并发控制方法:乐观/悲观并发控制,Elasticsearch中的乐观并发控制

数据库领域常见的并发控制 悲观并发控制 假定冲突发生概率很高,在读取一行数据前,先锁定这一行,这样就可以确保只有读取到这行数据的线程可以修改这一行数据。 乐观并发控制 这也是ES所使用的。假设冲突发生概率不高,也不会去阻止某一数据的访问。然而,如果基础数据在我们读取和写入的间隔中发生了变化,更新就会失败。这时候就由程序来决定如何处理这个冲突。例如,它可以重新读取新数据来进行更新,又...

Elasticsearch中的document

document的读写策略

Reading and Writing documents 在es中每个索引都会被分成几个分片(shard),每个分片又会有几个副本(replication)。在删除、新增、更新文档时,必须同步到各个副本,否则从各个副本中读取的数据就会不一致。我们把保持分片副本间的同步和提供数据读取称之为”data replication model”。 es中的 data replication mod...