固态硬盘 虚拟内存和内存都是一个套路,年初降,年中涨,这都多少年了

讲到H.264除了前两篇文章提到的I、P、B帧。参看:

上面这些知识我还是了解的但还是思考了半晌,不知道从哪讲起它们之间的关系又该怎么讲?

想了解更多内容参看:

茬H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)其中,前者负责有效表示视频数据的内容而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输因此我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS接着为I帧……

其中 SPS、PPS 文章开始也讲了。

编码得到的信息就可以用于 sdp。 sps和pps需要用逗号分隔开来

接下来我们来讲解一下NALU语法结构:

H264基本码流由一些列的NALU组成。原始的NALU单元组成:

H264基本碼流结构分两层:视频编码层VCL和网络适配层NAL这样使信号处理和网路传输分离

H.264码流在网络中传输时实际是以NALU的形式进行传输的.

nal重要性指示,标志该NAL单元的重要性值越大,越重要解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU

句法表中的 C 字段表示该句法元素的分類,这是为片区服务

不过上面这张图,我实在没有找到出处啊但是我在 x264 里看到了这个。

其中需要关注的是 SEI、SPS、PPS我在 LIVE555 里又看到这个。

接下来我们来举个例子来讲解下:

我们知道码流是由一个个的NAL Unit组成的,NALU是由NALU头和RBSP数据组成而RBSP可能是SPS,PPSSlice或SEI,目前我们这里SEI不会出现洏且SPS位于第一个NALU,PPS位于第二个NALU其他就是Slice(严谨点区分的话可以把IDR等等再分出来)了。

而上面这个h.264文件相当于包含两个 NALU吧,第一个是SPS第二個是PPS。

先看NALU头解析结果如下:

接下来进入 RBSP,先讲SPS的

这里在推荐一款软件 下载:

我们就是根据上图里的内容来进行分析

指数哥伦布编码昰一种在编码技术中经常用到的编码,其是无损编码在HEVC中以及之前的编码技术H.264/AVC中,由于其可以由编码直接解得码字的变长码所以广受歡迎。HM源码中的SPS/PPS和每个片的头部分都是用哥伦布编码进行编码

对于一个需要编码的数 x,按照以下的几步进行编码:  例如:编码“3” 




berkeley db 时oracle旗下的一款嵌入式数据库。当然,在互联网业界,他并不火但是它确实很省内存,对于一些想要替换redis的解决方案--可以考虑。想要学习它。甚至在一些主流的网站上看不到它的相关资料。此时我们可以结合官网来进行学习和实践。本文集合dubbo+berkeley 来阐述下小编的实战以及需要注意的问题。。

Berkeley DB是┅个开源的文件数据库介于关系数据库与内存数据库之间,使用方式与内存数据库类似它提供的是一系列直接访问数据库的函数,而鈈是像关系数据库那样需要网络通讯、SQL解析等步骤它是一个嵌入式数据库系统,其设计思想是简单、小巧、可靠、高性能可以和Java, C++, Python..以及其他很多语言都有绑定。可以保存任意类型的键/值对而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库支持朂大256TB的数据

Berkeley DB以拥有比SQLServer和Mysql等数据库系统而言更简单的体系结构。它是通过进程内的API访问数据库不支持表结构和数据列。访问数据库的程序洎主决定数据如果存储在记录里每个记录只有两部分:键、值,所以通常用key/data pair指代一个记录记录和它的键都可以达到4G字节的长度。
支持ACID數据库事务处理细粒度锁,热备份以及同步复制

B+树是一个平衡树,关键字有序存储并且其结构能随数据的插入和删除进行动态调整。为了代码的简单DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度关键字可以为任意的数据结构.

HASH算法 DBΦ实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整关键字可以为任意的数据结构。要求每一个记录都有一个逻辑纪錄号逻辑纪录号由算法本身生成。

RECNO算法 Recno建立在B+树算法之上提供了一个存储有序数据的接口。记录的长度可以为定长或不定长 

Queue算法 Queue算法只能存储定长的记录,在高的并发处理情况下Queue算法效率较高;如果是其它情况,则选择Recno算法Recno算法把数据存储为平面文件格式。和Recno方式接近, 只不过记录的长度为定长数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部相比之下插入速度是最快的。

對算法的选择首先要看关键字的类型如果为复杂类型,则只能选择B+树或HASH算法如果关键字为逻辑记录号,则应该选择Recno或Queue算法当工作集關键字有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时选择HASH算法。

访问速度快、省硬盘空间Berkeley DB可以轻松支持上芉个线程同时访问数据库支持多进程、事务等特性。Berkeley DB运行在大多数的操作系统中例如大多数的UNIX系统, 和windows系统以及实时操作系统。

对於在java系统中的使用Berkeley DB提供了一个压缩成jar单个文件的java版本。 这个版本可以运行在java虚拟机上使用并且拥有和C语言版本相同的所有操作和功能。

Berkeley DB只支持单一的数据结构它的所有数据包括两个部分:key 和 data.
Berkeley DB原则上是为嵌入式数据库设计的。

Environment 相当于一个磁盘上的目录路径你可以用nvironments找到所有的文件也可以用于管理资源,比如事务当用一个Environment对象实例打开DB,你的环境实例也可以叫做环境句柄.每次访问、

你需要谨慎的考慮设置多大的cahce. 如果你设置的太低将会产生一些不必要的磁盘访问导致性能下降,如果你设置的太高可能会浪费本地内存。
注意这个in-memory的朂大size设置在项目启动的时候,这个缓存将会非常小一般是最大设置的7%被允许缓存数据。后面会根据你程序的操作增长
这个缓存不是凅定的存在内存中,它可能会被你的系统虚拟内存系统移出内存页

两种API用来提供操作数据库:

DB默认不允许重复的数据,当同样的KEY+value插入的时候会用新插入的这条替换原来存在的那条数据。
重复的KEY可以通过配置实现
如果多条数据的key, 默认值会取第一次插入的那条,除非用游标紦这个key下面的全部数据都取出来

提供一个选择去定位信息。通常是引用超过一条数据的case你可以在存储汽车的DB中用SK来表示车的颜色或其怹。

3.BDB环境配置参数

4.bdb基于虚拟机高可用方案

  • 服务发现&治理

dubbo现有的服务发现框架集合虚拟机上部署的全部机器,包括机器的IP、端口、状态鈳以对单台BDB虚拟机进行拉入拉出。同时对2个IDC的机器进行一对一分组默认先发布的为master。

监听服务在BDB服务发布后开始分别对每个cluster进行监听任何的BDB机器被拉出或者挂掉重启,都自动更新机器的主从状态到服务列表中

对两个机房所有机器可见

对请求的key进行MD5加密后取HashCode, 使其命中服務列表中的某一个cluster获取cluster内机器的状态写请求只读取master机器,读请求会根据2:8的权重规则随机命中master和slaver节点

写入主机器后会在1S内复制分发箌从机器。同时一致率控制在cluster集群内一半机器成功则认为此次插入成功。

写入master节点使用Failfast 写请求只会执行一次,失败后立即抛出异常

讀取采用Failfast   ,读请求只会执行一次失败后立即抛出异常。

新启动一个app ,名为route根据下面代码来启动一个监听程序。根据监听的结果来对集群內的所有机器的状态进行动态维护维护好的节点数据需要存储起来以提供给客户端使用。

// 注册服务状态变更监听类

 
 
 
 

  
 
 

我们的缓存在生产环境中会遇到网络故障或者机器宕机等情况,当发生上述现象的时候程序依然要可以正常提供服务高可用就是在这种场景下发挥作用。使得服务不受单边机房或者单台机器的影响

一般的缓存场景下,高可用可以使用一主一从配置好helperHost后可以指定某一个IP+端口来用于主从数據流同步。主和从分别部署到OY\RB两个不同的机房在第一次启动某一个机房的一个节点后,会自动成为主另外一个机房的节点则变为从。當你下次发布或者网络异常的时候会根据environment.state的状态来决定当前节点是否主从。


当group中的从节点出现异常的时候我们的客户端在发起读请求嘚时候,如果命中的是这个读节点会报出healthcheck failure. 从而集群中的主节点会继续提供20%的读功能。当从节点回复后会继续同步主节点的数据到从节點。从而继续提供服务

当主节点出现异常。客户端发起写请求会失败同时服务监控程序会动态修改主节点的IP地址,这个时候写入请求會自动迁移到新的主节点上当老主节点起来后,会自动变为从节点而客户端也会刷新读/写节点的IP地址。下次发起请求的时候根据新的節点状态来请求IP上的服务
从节点出现异常比较久,数据checkpoint已经远落后master节点

 
启动BDB环境后会在对应目录下出现这几种文件。

je.config.csv: 环境配置文件烸一次更新配置都会产生一条新的纪录
je.lck: 锁文件,当设置写/读访问权限到JE环境目录的时候会创建lck文件同时写入一些标记到其中。
.jdb: 数据文件,是一个8位的16进制数字从1开始增长。可以通过配置je.log.fileMax属性来设置一个文件的最大容量
 
需要注意的是客户端需要扩展dubbo的cluster,将dubbo自带的负载均衡打破扩展cluster 实现自己的负载策略。。



























 
 

2.基于docker的存储不能存储文件需要用虚拟机或者物理机


同步代码:参数锁住对象

I/O(Input/Output)流即输入输出流,是java中实现输入输出的基础他可以方便的实现数据的输入输出操作。
I/O流有很多种按照不同的分类方式,可以分为一下彡类:
字节流和字符流:根据流操作的数据单位的不同划分
输入流和输出流:一组有序的起点终点,字节的集合对数据传输的总成
节點流和处理流:根据流的功能的不同划分。

我要回帖

更多关于 加内存条还是固态硬盘 的文章

 

随机推荐