immutable

分布式专题——详解Google levelDB底层原理

亡梦爱人 提交于 2020-03-28 10:50:15
本文始发于个人公众号: TechFlow ,原创不易,求个关注 今天是 分布式专题的第10篇 文章,我们继续来聊聊LSMT这个数据结构。 LSMT是一个在分布式系统当中应用非常广泛,并且原理直观简单的数据结构。在上一篇文章当中我们进行了详细的讨论,有所遗忘或者是新关注的同学可以点击下方的链接回顾一下上一讲的内容。 分布式——吞吐量巨强、Hbase的承载者 LSMT leveldb简介 上一篇的内容我们介绍的算是最基础版本的LSMT,在这一篇当中,我们来具体看下levelDB这个经典的KV数据库引擎当中LSMT的使用以及优化。 leveldb,既然是叫做db,显然和数据库有关。和一般的关系型数据库不同,它内部的数据全部以KV也就是key-value形式存储,并且不支持结构化的SQL进行数据查询,只支持api调用。也就是说它就是一个典型的我们常说的noSQL数据引擎库。它最早由 google 开发并且开源, Facebook 在此基础上进行优化,推出了更普及的RocksDB,后来包括TiDB等多种分布式noSQL数据库的底层都是基于leveldb。 如果上面这些名词你都没听说过,也没有关系,对于这些库而言,上手去用容易,但是了解原理难。搞懂了原理再实际上手去用,除了更加简单之外,也会有更多的体会。 leveldb架构 这是一张leveldb的架构图

PureComent要和immutable一起使用

岁酱吖の 提交于 2020-03-17 07:28:38
PureComent:   当props或者state改变时,PureComponent将对props和state进 行浅比较。 而Component不会比较当前和下个状态的props和state。 因此,每当shouldComponentUpdate被调用时,组件默认的会重新渲染。 immutable:   Immutable数据就是一旦创建,就不能更改的数据。 每当对Immutable对象进行修改的时候,就会返回 一个 新的Immutable对象,以此来保证数据的不可变。 来源: https://www.cnblogs.com/ladybug7/p/12508377.html

更多的集合

浪尽此生 提交于 2020-03-08 11:56:28
Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。这让你的代码可以与 Foo 的集合交互,而无需担心该集合是是一个 List ,还是 Set ,或是任何你有的类型。 这里 提供了一个很好的页面来查看各种集合的默认实现,并链接到他们的scala在线文档。 基础知识 你会随时用到的基本集合类型 层次结构 集合抽象层次 方法 方法 可变集合 可变 Java集合 与java集合交互 基础知识 表 List 标准的链表。 scala> List(1, 2, 3) res0: List[Int] = List(1, 2, 3) 你可以用函数式语言的方式连接它们。 scala> 1 :: 2 :: 3 :: Nil res1: List[Int] = List(1, 2, 3) 参考 API文档 集 Set 集没有重复 scala> Set(1, 1, 2) res2: scala.collection.immutable.Set[Int] = Set(1, 2) 参考 API文档 序列 Seq 序列有一个给定的顺序。 scala> Seq(1, 1, 2) res3: Seq[Int] = List(1, 1, 2) (请注意返回的是一个列表。因为 Seq 是一个特质;而列表是序列的很好实现。如你所见, Seq 也是一个工厂单例对象,可以用来创建列表。) 参考 API文档 映射

Java设计模式之immutable(不可变)模式

点点圈 提交于 2020-03-05 23:04:16
immutable简介 不可变对象永远不会发生改变,其字段的值只在构造函数运行时设置一次,其后就不会再改变 。例如JDK中常见的两种基本数据类型String和Integer,它们都是不可变对象。为了理解immutable与mutable的区别,可以看看下面的一段代码: package date0804.demo2; import java.awt.Point; public class ImmutableString { public static void main(String[] args) { //String,immutable String str = new String("new book"); System.out.println(str); str.replaceAll("new", "old"); System.out.println(str); //Point,mutable Point point = new Point(0,0); System.out.println(point); point.setLocation(1, 0); System.out.println(point); } } 运行结果为 new book new book java.awt.Point[x=0,y=0] java.awt.Point[x=1,y=0]

mutable string vs. immutable string

廉价感情. 提交于 2020-03-05 22:47:48
一、如果String是mutable的,如C++的std::string 看下面的例子: void foo1(string s) { s[0] = 'b'; } void foo2(string &s) { s[0] = 'b'; } int main(void) { string s1 = "hello"; string s2 = "hello"; foo1(s1); foo2(s2); // hello cout << s1 << endl; // bello,s2变量的值被修改了 cout << s2 << endl; } mutable字符串的特点是: ① 单线程下对字符串的更改速度快。但多线程修改时为了保证正确性,需要加锁处理,影响性能。 ② 占用内存空间小。 ③ 如果按引用随意传递的话,将会难以追踪其变化。最好的方式是如果函数不修改它,就传递常引用。 二、如果String是immutable,如jdk的java.lang.String 看下面的例子: static void foo(String s) { s = "java"; } public static void main(String[] args) { String s = "hello"; foo(s); // hello System.out.println(s); } immutable字符串的特点是:

Scala数组和集合

↘锁芯ラ 提交于 2020-02-28 06:01:06
一、scala数组 数组定义1: var arr = new Array[String](3) String:存储的元素类型 3:存储3个元素 添加元素: arr(1) = "hello" 数组定义2: val arr1 = Array[Int](1,2,3,4,5,6) 改变内容:arr1(1) = 18 添加元素:arr1 += 22 长度不可以改变 二、数组方法 1、map(映射) 映射: 2 4 6 映射关系:f(x) = x*5 对应映射关系:10 20 30 例: scala> var arr = Array(1,2,3) arr: Array[Int] = Array(1, 2, 3) scala> arr.map((x: Int) => x * 10) res12: Array[Int] = Array(10, 20, 30) scala> arr res13: Array[Int] = Array(1, 2, 3) scala> res12 res14: Array[Int] = Array(10, 20, 30) 2、flatten(扁平化操作) scala> var arr = Array("hello Beijing","hello China") arr: Array[String] = Array(hello Beijing, hello China)

Java学习74:使用Collections

谁都会走 提交于 2020-02-27 01:37:47
Collections是JDK提供的一个工具类,同样位于java.util包中。它提供了一系列静态方法,能更方便的操作集合。 我们一般看方法名和参数就知道Collections提供的该方法的功能。例如: public static boolean addAll ( Collection < ? super T > c , T . . . elements ) { . . . } addAll()方法可以给一个Collection类型的集合添加因为方法签名是Collection,所以我们可以传入List,Set等各种集合类型。 创建空集合 Collections提供了一系列方法来创建空集合: 创建空List:List emptyList() 创建空Map:Map<K, V> emptyMap() 创建空Set:Set emptySet() 要注意到返回的空集合是不可变集合,无法向其中添加或删除元素。 此外,也可以用各个集合接口提供的of(T…)方法创建空集合。例如,以下创建空List的两个方法是等价的: List < String > list1 = List . of ( ) ; List < String > list2 = Collections . emptyList ( ) ; 创建单元素集合 Collections提供了一系列方法来创建一个单元素集合:

Linux后门入侵检测

馋奶兔 提交于 2020-02-23 19:09:49
蛋疼啊,服务器被入侵成肉鸡了,发出大量SYN请求到某个网站!(瞬间有种被OOXX(强)(奸)的赶脚) 泪奔ING... 源起: Linux服务器日常检查,#ps aux 发现大量httpd进程,和往常情况不同(和以往多出好几倍),接着#top 一下,httpd名列前茅!(JJ Fly...) #netstat -anp 发现大量SYN_SENT,成肉鸡了!(瞬间有种被OOXX(强)(奸)的赶脚)! #cd / 转到根目录 #ll -a检查最近修改过的文件,发现/etc文件夹在前几天凌晨三点被修改过,#cd /etc #ll -a 检测是否存在root.kit 1.安装chkrootkit(不安装工具,手动检测,你会疯的) rootkit从浅显的层面来讲即一种具有自我隐蔽性的后门程序,它往往被入侵者作为一种入侵工具。通过rootkit,入侵者可以偷偷控制被入侵的电脑,因此危害巨大。chkrootkit是一个Linux系统下的查找检测rootkit后门的工具。 安装方法 1、准备gcc编译环境 对于CentOS系统,执行下述三条命令: yum -y install gcc yum -y install gcc-c++ yum -y install make 对于debian系统,执行下述两条命令: apt-get -y install gcc apt-get -y install

rocksdb配置参数

折月煮酒 提交于 2020-01-27 12:13:11
配置参数: 参数含义 附加说明 [DBOptions] new_table_reader_for_compaction_inputs=false recycle_log_file_num=0 avoid_flush_during_shutdown=false skip_stats_update_on_db_open=false use_direct_io_for_flush_and_compaction=false access_hint_on_compaction_start=NORMAL allow_fallocate=true fail_if_options_file_error=false create_if_missing=false max_manifest_file_size=18446744073709551615 write_thread_slow_yield_usec=3 delayed_write_rate=16777216 create_missing_column_families=false error_if_exists=false allow_concurrent_memtable_write=true db_log_dir= paranoid_checks=true skip_log_error_on_recovery=false

系统卡写入量过大之---LSM-tree 基本原理及应用

ぃ、小莉子 提交于 2020-01-27 12:07:26
LSM-tree 在 NoSQL 系统里非常常见,基本已经成为必选方案了。今天介绍一下 LSM-tree 的主要思想,再举一个 LevelDB 的例子。 LSM-tree 起源于 1996 年的一篇论文《The Log-Structured Merge-Tree (LSM-Tree)》,这篇论文 32 页,我一直没读,对 LSM 的学习基本都来自顶会论文的背景知识以及开源系统文档。今天的内容和图片主要来源于 FAST’16 的《WiscKey: Separating Keys from Values in SSD-conscious Storage》。 先看名字,log-structured,日志结构的,日志是软件系统打出来的,就跟人写日记一样,一页一页往下写,而且系统写日志不会写错,所以不需要更改,只需要在后边追加就好了。各种数据库的写前日志也是追加型的,因此日志结构的基本就指代追加。注意他还是个 “Merge-tree”,也就是“合并-树”,合并就是把多个合成一个。 好,不扯淡了,说正文了。 LSM-tree 是专门为 key-value 存储系统设计的,key-value 类型的存储系统最主要的就两个个功能,put(k,v):写入一个(k,v),get(k):给定一个 k 查找 v。 LSM-tree 最大的特点就是写入速度快,主要利用了磁盘的顺序写,pk掉了需要随机写入的