Mryqu's Notes


  • 首页

  • 搜索
close

GemFire 数据逐出和持久化

时间: 2013-05-17   |   分类: Cache     |   阅读: 213 字 ~1分钟
为什么逐出数据? 如果有多于JVM内存的数据想放入Region,数据逐出是可能使用的一种解决方案。 一种备选方案是对数据进行分区。然而分区Region也可能无法将所有数据放入内存,所以有可能需要对分区Region采用数据逐出。 另一种备选方案是让数据过一定期限后从内存删除,这是基于时间而不是空间的一种方案。 数据逐出如何工作? 当使用数据逐出时需要决定所采用的算法和动作。 算法规定了需要检查的所耗费资源的最大值,可为基于条目数量、内存消耗字节数和可用堆消耗百分比的LRU(最近最少使用)算法。 条目数量和绝对内存消耗量完全由GemFire逐出控制器基于Region级别进行管理。EntryLRU是最简单的算法,适用于每个条目消耗相同大小的内存。Memory LRU则适用于每个条目消耗不同大小的内存。 Heap消耗百分比由GemFire逐出控制器基于缓存级别进行管理。最大值设置在管理器配置的缓存下配置。当管理器断定需要进行数据逐出时,它命令逐出控制器对所有逐出算法设为lru-heap-percentage的region采取数据逐出,直到管理器停止这一命令。注意的是,当其他非LRU资源甚至非GemFire缓存消耗内存时,这一算法也会导致HeapLRUregion的数据逐出。 对于一个region,数据逐出操作会逐出最近最少使用到的条目。几乎所有操作(包括读写)都认为是对条目的使用,除了以下的操作: Region.containsKey Region.containsValue Region.getEntry 当使用MemoryLRU或HeapLRU算法时需要实现ObjectSizer接口。这让GemFire可以调用自己的代码来计算条目的字节大小。让条目大小估算精确很重要,但同时需要注意的是复杂ObjectSize实现会花费较长时间并导致性能下降。如果条目的所有值都是String或byte[]类型,GemFire会自动计算内存大小,无须实现ObjectSizer。 分区Region在数据逐出的不同之处 对于分区region,基于条目数量和内存消耗量的逐出行为当节点数据超过本地缓存主副本和冗余副本组合的限制后发生。对于基于堆消耗百分比的逐出行为由管理器驱动。 因为维护整个分区region或者同一节点所有桶(bucket)的LRU条目信息代价太大,GemFire是基于桶来维护LRU条目信息的。此外,对分区region的所有桶施行数据组出会导致数据分布失衡。 因此,对分区region进行的数据逐出可能会保留相对本地节点其他桶或其他分布系统节点相对更老的条目。它可能在主副本中保留条目而在第二副本中逐出条目,或者相反。 LRU逐出对每个桶单独进行: 对基于内存和条目数的数据逐出,LRU逐出在操作新条目时有可能执行,直到Region的桶组合整体内存下降到门限下结束。对于内存逐出,分区region最大内存门限会忽略lru-memory-size设置,始终是local-max-memory。 对于基于堆的数据逐出,每个分区region桶被当作单独region来处理,每个逐出动作仅考虑桶内的LRU,而不是整体分区region。 动作为本地删除条目的数据逐出无法用于复制region,因为不允许对复制分区进行本地写操作,这会违反所有数据在复制分区都可见的契约。如果需要使用本地删除条目的数据逐出,可以考虑使用预加载数据策略,其行为在初始化时与复制分区相同并允许动作为本地删除条目的数据逐出。 数据无持久化 数据持久化 EvictionAction.NONE 条目将在内存中一直保存。 条目将在内存和磁盘中一直保存。 EvictionAction.LOCAL_DESTROY 条目(键和值两部分)将从内存中释放。仅当被逐出数据可从外部数据源加载时可用。 EvictionAction.OVERFLOW_TO_DISK 条目将被逐出到磁盘但是不会持久化 (当缓存关闭时磁盘文件将被删除),条目的键部分始终在内存中保存。 条目(键和值两部分)一直在磁盘中保存。条目的值部分将被逐出,键部分始终在内存中保存。 磁盘存储文件名和扩展名 磁盘存储文件包括存储管理、访问控制文件和操作日志(oplog,记录了删除和其他所有操作)。下面的表描述了文件名和扩展名及示例。 文件名 文件名包括三部分: 第一部分: 使用标识 值 用途 示例 OVERFLOW 仅为溢出region和队列的操作日志数据。 OVERFLOWoverflowDS1_1.crf BACKUP 持久化、持久化+溢出rgion和队列操作日志数据。 BACKUPoverflowDS1.if, BACKUPDEFAULT.if DRLK_IF 访问控制 - 对磁盘存储上锁。 DRLK_IFoverflowDS1.lk, DRLK_IFDEFAULT.lk 第二部分: 磁盘存储名 值 用途 示例 <磁盘存储名> 非默认磁盘存储。 name=“overflowDS1” DRLK_IFoverflowDS1.lk, name=“persistDS1” BACKUPpersistDS1_1.crf DEFAULT 默认磁盘存储名,当对region或队列指定持久化或溢出但没有命名磁盘存储时使用。 DRLK_IFDEFAULT.lk, BACKUPDEFAULT_1.
阅读全文 »

GemFire查询

时间: 2013-05-15   |   分类: Cache     |   阅读: 1782 字 ~9分钟
GemFire在region中存储的数据为键值对,其中值可以为任何对象,例如简单的字节数组或者复杂的嵌套对象。GemFire提供了一种查询机制可以获得满足特定条件的键、值或条目集合。GemFire支持的查询语义和语法是OQL(对象查询语言)的一个子集。OQL是由对象数据管理组制定的ODMG3.0对象模型的重要组件之一,与SQL很相似,可以查询复杂对象、对象属性和方法,支持完整的ASCII和Unicode字符集。 为了提高查询执行效率,GemFire像数据库一样支持索引。在查询执行时,查询引擎使用数据存储上的索引可以减少查询处理时间。查询是GemFire很强大的功能,但它也需要大量性能优化和容量规划也确保不拖垮系统。 Region存储示例 本文的查询示例基于类Porfolio和Positon的对象。 Portfolio.java package query; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.gemstone.gemfire.DataSerializable; import com.gemstone.gemfire.DataSerializer; public class Portfolio implements Serializable, DataSerializable { private int ID; public String pkid; public Position position1; public Position position2; public String description; public HashMap positions = new HashMap(); String type; public String status; public String [] names={"aaa","bbb","ccc","ddd"}; public int getID() { return ID; } public String getPk() { return pkid; } public HashMap getPositions() { return positions; } public Position getP1() { return position1; } public Position getP2() { return position2; } public boolean isActive() { return status.
阅读全文 »

GemFire Region分类

时间: 2013-05-15   |   分类: Cache     |   阅读: 160 字 ~1分钟
GemFire开发指南6.5的第4.2节仅列举了分区、复制(分布式)、分布式(非复制)和本地四种Region类型,但RegionShortcut类却定义了23个快捷预定义属性Region。Region的主要行为取决于数据策略、关注策略、范围、本地最大内存和冗余拷贝数(仅用于分区Region)、逐出算法和动作。 Region快捷预定义属性 数据策略 范围 本地最大内存注1 冗余拷贝数注1 逐出算法 逐出动作 LOCAL NORMAL LOCAL LOCAL_HEAP_LRU NORMAL LOCAL LRU_HEAP LOCAL_DESTROY LOCAL_OVERFLOW NORMAL LOCAL LRU_HEAP OVERFLOW_TO_DISK LOCAL_PERSISTENT PERSISTENT_REPLICATE LOCAL LOCAL_PERSISTENT_OVERFLOW PERSISTENT_REPLICATE LOCAL LRU_HEAP OVERFLOW_TO_DISK PARTITION PARTITION PARTITION_HEAP_LRU PARTITION LRU_HEAP LOCAL_DESTROY PARTITION_OVERFLOW PARTITION LRU_HEAP OVERFLOW_TO_DISK PARTITION_PERSISTENT PERSISTENT_PARTITION PARTITION_PERSISTENT_OVERFLOW PERSISTENT_PARTITION LRU_HEAP OVERFLOW_TO_DISK PARTITION_PROXY PARTITION 0 PARTITION_PROXY_REDUNDANT PARTITION 0 1 PARTITION_REDUNDANT PARTITION 1 PARTITION_REDUNDANT_HEAP_LRU PARTITION 1 LRU_HEAP LOCAL_DESTROY PARTITION_REDUNDANT_OVERFLOW PARTITION 1 LRU_HEAP OVERFLOW_TO_DISK PARTITION_REDUNDANT_PERSISTENT PERSISTENT_PARTITION 1 PARTITION_REDUNDANT_ PERSISTENT_OVERFLOW PERSISTENT_PARTITION 1 LRU_HEAP OVERFLOW_TO_DISK REPLICATE REPLICATE DISTRIBUTED_ACK REPLICATE_HEAP_LRU PRELOAD DISTRIBUTED_ACK LRU_HEAP LOCAL_DESTROY REPLICATE_OVERFLOW REPLICATE DISTRIBUTED_ACK LRU_HEAP OVERFLOW_TO_DISK REPLICATE_PERSISTENT PERSISTENT_REPLICATE DISTRIBUTED_ACK REPLICATE_PERSISTENT_OVERFLOW PERSISTENT_REPLICATE DISTRIBUTED_ACK LRU_HEAP OVERFLOW_TO_DISK REPLICATE_PROXY EMPTY DISTRIBUTED_ACK 注1:仅用于分区region
阅读全文 »

为Unix终端或Windows命令行设置UTF-8编码

时间: 2013-05-14   |   分类: Tool     |   阅读: 1112 字 ~6分钟
Unix终端## 使用“locale –a” 命令检查支持的编码 servermt> locale -a C POSIX ……… en_US.ISO8859-1 en_US.ISO8859-15 en_US.US-ASCII en_US.UTF-8 ……… 设置环境变量 LANG=en_US.UTF-8 Windows命令行 通过chcp命令设置 Displays or sets the active code page number: CHCP [nnn] C:\>chcp Active code page: 437 C:\>chcp 65001 Active code page: 65001 通过mode con命令设置 Select code page: MODE CON[:] CP SELECT=yyy Code page status: MODE CON[:] CP [/STATUS] C:\>mode con cp /status Status for device CON: ---------------------- Code page: 437 C:\>mode con cp select=65001 Status for device CON: ---------------------- Lines: 300 Columns: 160 Keyboard rate: 31 Keyboard delay: 1 Code page: 65001 代码页代号 Identifier .
阅读全文 »

Windows服务的创建、查询及删除操作

时间: 2013-05-14   |   分类: Tool     |   阅读: 14 字 ~1分钟
SC是与Windows服务管理器和服务通信的命令行程序。 查询SC帮助 创建Windows服务 示例:sc create akxService binPath= C:\Test\akxService.exe 查询Windows服务 删除Windows服务 示例:sc delete akxService 如果服务名含有空格,可在服务名上加双引号。

技术博文链接

时间: 2013-03-06   |   分类: Tech     |   阅读: 96 字 ~1分钟
Webkit Webkit内核探究【1】——Webkit简介 Webkit内核探究【2】——Webkit CSS实现 WebKit内核源代码分析(一) WebKit内核源代码分析(二) WebKit内核源代码分析(三) WebKit内核源代码分析(四) WebKit内核源代码分析(五) 安全存储密码 如何安全的存储密码 - hash、salt 以及更多 MD5+Salt加密机制 ActiveMQ ActiveMQ in Action (1) 关于Session.DUPS_OK_ACKNOWLEDGE的注解: 当使用DUPS_OK_ACKNOWLEDGE会话应答模式,会话延迟应答消息的传递情况。 当JMS出现问题,这可能导致一些消息的重复传递,所以仅用于消费者能容忍重复消息的情况下。 其优点是通过减少会话防止重复消息的工作来减少会话的负载。 ActiveMQ in Action (2) ActiveMQ in Action (3) ActiveMQ in Action (4) ActiveMQ in Action (5) ActiveMQ in Action (6) ActiveMQ in Action (7) 飞鸟Blog:优化ActiveMQ性能 Tomcat集群 负载均衡技术 Apache + Tomcat集群配置详解 (1) Apache + Tomcat集群配置详解 (2) IP组播与组播协议 Tomcat集群Cluster实现原理剖析 利用JMX监控Tomcat集群 负载均衡 http://en.wikipedia.org/wiki/Load_balancing_(computing) http://zh.wikipedia.org/wiki/负载均衡_(计算机) Web Application Server架构 Tomcat 系统原理分析 Tomcat 设计模式分析 Jetty 的工作原理以及与 Tomcat 的比较
阅读全文 »

尝试了一下jacob

时间: 2013-02-18   |   分类: Java     |   阅读: 6 字 ~1分钟
JACOB开源项目 Jacob是Java与COM组件桥接的缩写,即JAVA-COMBridge。通过使用Jacob类库,我们可以很方便地在Java程序中使用JNI来进行本地调用COM库。它可运行在x86和(支持32位和64位Java虚拟机的)X64环境。Jacob最初是由美国人DanAlder在Inventure公司担任CTO时编写的,目的是为了方便众多的程序员在Java2虚拟机上,调用Win32平台上COM自动化服务器中的组件。当Jacob项目以开源的方式在网络上公布以后,越来越多的人开始参与项目的研发与改进中去。 JACOB 相关博文: Jacob的简单介绍 Jacob使用入门及问题解析

孔多塞投票悖论

时间: 2013-01-20   |   阅读: 59 字 ~1分钟
简介 投票悖论指的是在通过“多数原则”实现个人选择到集体选择的转换过程中所遇到的障碍或非传递性,这是阿罗的不可能定理衍生出的难题。公共选择理论对投票行为的研究假设投票是那些其福利受到投票结果影响的人们进行的,投票行为的作用是将个人偏好转化为社会偏好。在多数投票原则下,可能没有稳定一致的结果。 投票悖论是公共选择理论中的概念,又称为循环的大多数,是指在集体投票时容易出现投票结果随投票次序的不同变化,大部分甚至全部备选方案在比较过程中都有机会轮流当选的循环现象。 18世纪时,法国著名思想家提出了所谓的“投票悖论”,后人称其为“孔多塞投票悖论”。其描述为:设有A、B、C三个人,他们对X、Y、Z的偏好如下: A: X>Y>Z B: Y>Z>X C: Z>X>Y 如果按照社会少数服从多数的原则,对X与Y进行民主表决,那么结果如下: A: X>Y B: Y>X C: X>Y 社会偏好:X>Y 因为A、C两个人都偏好X,只有一个人B偏好Y,所以根据少数服从多数原则,我们最后得到X>Y的社会偏好。 同理,我们如果再按照少数服从多数的原则,对Y与Z以及X与Z进行民主表决。通过三次选择,于是我们得到一个矛盾的社会偏好: X>Y;Y>Z;Z>X 从上面的论述中,孔多塞认为,大众投票并不会真正传递社会偏好,投票制度并不能真正保证社会合意的结果。因为,根据常理推断,社会偏好应该具有某种传递特征。因此,大众投票并不能保证出最优的,投票从本质上不具有传递性,甚至会有某种非理性。 同时,孔多塞悖论还给我们另一层的其实:认为设计的投票顺序和规则,可以对投票的结果产生非常重大的影响。 例如三个女孩A、B、C一块出去吃午饭,可以选择肯德基、麦当劳、必胜客其中之一。她们的喜好如下: A: 麦当劳>肯德基>必胜客 B: 肯德基>麦当劳>必胜客 C: 必胜客>麦当劳>肯德基 由于偏好难以达成一致,于是三人决定投票,并定投票规则为:先在麦当劳和必胜客之间选一个,然后再在胜者和肯德基之间选一个。 假如三人都毫无心机,那么第一轮麦当劳胜出;第二轮又将胜出。这实际上是最佳选择,也就是说麦当劳在三人中的综合评论是最高的。 但是如果B为了达到自己的目的而动用一些策略,投票的结果将完全改变。B可以在第一轮故意投票给必胜客,淘汰掉麦当劳,必胜客胜出,第二轮肯德基铁定胜出,因此B通过策略实现了自己的最爱,但是这一结果却不符合总体的最大利益。 发展 1972年诺贝尔经济学奖的获得者肯尼思·阿罗,在他的《社会选择与个人价值》(1951)中,证明了著名的阿罗不可能性定理,把这个投票悖论形式化了。在该书中,他运用数学工具把孔多塞的观念严格化和一般化了。那么,能不能设计出一个消除循环投票,做出合理决策的投票方案呢? 阿罗的结论 根本不存在一种能保证效率、尊重个人偏好、并且不依赖程序 (agenda)的多数规则的投票方案。 阿罗证明 不存在同时满足如下四个基本公理的社会选择函数: 1)个人偏好的无限制性,即对一个社会可能存在的所有状态,逻辑上可能的个人偏好都不应当先验地被排除; 2)弱帕累托原则, 3)非相关目标独立性,即关于一对社会目标的社会偏好序不受其它目标偏好序变化的影响; 4)社会偏好的非独裁性。 简单地说,阿罗的不可能定理意味着,在通常情况下,当社会所有成员的偏好为已知时,不可能通过一定的方法从个人偏好次序得出社会偏好次序,不可能通过一定的程序准确地表达社会全体成员的个人偏好或者达到合意的公共决策。投票悖论表明:根本不存在一种能满足阿罗五个假设条件的社会选择原理。解决投票悖论的方法是限制投票偏好,即将多峰偏好改为单峰偏好。 解决 1998年诺贝尔经济学奖获得者阿马蒂亚·森在20世纪70年代提出对“投票悖论”的解决方法。阿马蒂亚·森所提出的解决投票悖论、绕过“阿罗不可能定理”的方法就是改变甲、乙、丙其中一个人的偏好次序,以解决投票悖论的问题。 举例 比如将A的偏好次序从(X>Y>Z)改变为(X>Z>Y),新的偏好次序排列如下: A:X>Z>Y B:Y>Z>X C:Z>X>Y 于是得到三个社会偏好次序——(X>Y)(Z>Y)(Z>X),这样就能避开投票悖论,当然它却改变了A的偏好次序。 阿马蒂亚·森选择模式 阿马蒂亚·森把这个发现加以延伸和拓展,得出了解决投票悖论的三种选择模式: 一、所有人都同意其中一项选择方案并非是最佳; 二、所有人都同意其中一项选择方案并非是次佳; 三、所有人都同意其中一项选择方案并非是最差。 阿马蒂亚·森表示在上述三种选择模式下,投票悖论不会再出现,取而代之的结果是得大多数票者获胜的规则总是能达到唯一的决定。但是有一个问题是为了追求一致性,改变、忽略、牺牲了个人偏好次序。

t分布的由来

时间: 2012-12-16   |   分类: DataScience     |   阅读: 3 字 ~1分钟
一直对student分布的名字莫名其妙,搜了一下,原来t分布是由统计学家哥威廉·戈塞在都柏林的A.吉尼斯父子酿酒厂对小样本中平均数比例对其标准误差的分布所做的研究,由于吉尼斯酿酒厂的规定禁止戈塞发表关于酿酒过程变化性的研究成果,因此戈塞不得不于1908年,首次以“学生”(Student)为笔名,发表自己的研究成果。因此t分布又称为学生分布。 http://baike.baidu.com/view/1419652.htm http://baike.baidu.com/view/1332600.htm

学会了用excel制作甘特图

时间: 2012-09-23   |   分类: Tool     |   阅读: 3 字 ~1分钟
参考文档 http://dreamtails.pixnet.net/blog/post/22059710-用excel畫甘特圖! http://www.excel123.cn/Article/tuxinghetubiao/201201/917.html
59 60 61 62 63 64 65 66 67

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%