纪事本 乱码_纪事日记–可自定义的数据存储

纪事本 乱码

总览

使任何数据结构或算法尽可能快的方法是使代码完全执行您想要的操作,而无需执行其他操作。 建立一个可以做任何人想做的每件事的数据存储的问题是,它做得特别不好。

自定义数据存储在性能方面可以实现什么?

您可以支持;

  • 大约75纳秒的读/写延迟。
  • 每秒处理4000万次操作。
  • 二进制编码和压缩功能可以将数据大小减少100倍或更多。 这样可以节省内存并提高可伸缩性。
  • 控制复制如何利用您的网络或与数据库同步。

我们真的需要可定制的数据存储吗?

大多数开发人员不太担心其数据存储的效率如何,而通用数据存储则可以很好地工作并隐藏其实际工作方式的细节。 这可以为开发人员节省大量时间,使他们不必担心数据存储如何工作的细节。

有时候,选择数据存储及其操作方式确实很重要。 如果数据存储空间被大量使用,那么数据的排列方式,数据提供的功能以及同样重要的是,数据存储所不具有的功能确实很重要。 您不想承担不使用的支持功能的开销。

为什么无功系统有更高的要求?

响应式系统对及时性有更高的要求,需要在几毫秒甚至几微秒的时间内查看事件/更新。

React性系统更可能关心数据如何到达最终状态。 与轮询系统不同,在轮询系统中,您更有可能仅看到多次更改的最终结果,而被动系统可能需要准确查看按什么顺序进行了哪些更改。

低延迟,高吞吐量

一个简单的线程安全,分段的键值存储可以具有大约75纳秒的延迟,并且每秒支持4000万次访问(获取或放置)。 添加对更多功能的支持将影响性能,因此,如果性能也很关键,则只想添加所需的功能。

即使是简单的事情,例如添加一个时间戳,它可能需要30纳秒的声音,但可能意味着操作时间要长50%。

您希望能够自定义哪些选项?

您是否需要总体订购,基于商店的订购,基于细分的订购或基于密钥的订购?

排序约束与事件的锁定或序列化紧密相关。 锁定更易于实现并支持更丰富的功能,但是无锁定算法不仅可以更快,更可扩展且具有更一致的延迟。

在数据存储中,通过总排序,您将以一致的顺序看到所有更改。 尽管这是最安全的选择,但它对所有数据提出了全局序列化要求。 这极大地限制了并发更新的选项。 这确实简化了锁定,因为您对所有数据都有全局锁定。

另一种方法是订购数据存储。 这意味着您将知道商店所有更改的确切顺序,但不会记录商店之间的更改。 (您可以添加时间戳以获取更改发生时间的理想状态)

要允许商店内的并发,您可以使用细分或基于页面的排序。 更新分配给细分市场的条目时,该细分市场被锁定,但其他细分市场也可以更新。 您可以获取该细分受众群中所有事件的顺序,但不能获取细分受众群之间的所有事件的顺序。

仅通过限制单个键的更改顺序就可以实现最大的并发性。 这样,可以同时更新任意数量的密钥,但是至少您知道什么密钥可以持续更新。

最后,您可能不需要任何这些。 如果条目从未更改,它存在或不存在,则这特别有用。 您可能要防止任何记录被更改。 即只能添加记录。 如果将具有相同详细信息的相同记录添加两次,则可以接受并将其视为重复项。

共享内存数据存储

我们发现特别有用的功能是能够在同一台机器上的JVM之间共享数据。 这允许所有JVM以内存速度访问数据。

尽管此功能不会降低解决方案的速度,但确实会在设计上施加一些限制,以使其能够正常工作。 特别是,Java不支持JVM之间共享的堆,要共享内存,您需要使用堆外内存。

复制模型

有很多方法可以复制数据。

  • 最终的一致性。 我们赞成这种模型,因为它可以很好地处理大脑分裂情况。
  • 事务更新。 事件对于群集中的所有节点都是可见的,或者都不可见。
  • 至少一个备份。 更新被保存到至少两个节点。 如果失败,则数据不会丢失。 这可能比确保每个节点都接受更新要快。
  • 多集群复制。 尽管可以在本地群集中自由复制数据,但是您可能需要控制哪些数据可以复制到区域之间以及如何执行。
  • 流量整形可能需要控制更新速率,使用的带宽以及是否使用压缩。

同步或异步持久性

我们的解决方案尽力使同步速度与大多数异步执行更新的解决方案一样快。 这有助于减少开销和复杂性。

通常,对内存映射文件的写操作不会立即刷新到磁盘,因此磁盘子系统的选择无关紧要,前提是您没有使它过载。 就吞吐量而言,重要的是带宽利用率。 如果持续使用带宽的一小部分,则可能很快就会用完磁盘空间。 如果您仅以12 MB / s的速度持续写入,则每天将超过1 TB。

我们测试过的操作系统不会完全隐藏磁盘子系统。 对于每十个写入中的一个或每一百个写入中的一个,延迟将取决于您所拥有的磁盘子系统的类型。 如果您关心99%的切片延迟,那么选择磁盘子系统仍然很重要。

您将假设任何关心性能的人都将使用SSD,而不是PCI-SSD,因为它们的延迟大约比旋转磁盘快100倍。 企业SSD的IOPS(每秒IO)数也大约高100倍。 台式机固态硬盘可以高出1000倍,因此您可以期望这也将成为企业磁盘的标准。

不幸的是,在大型组织中并不是那么简单,如果完全可以得到批准,那么购买SSD驱动器可能会花费很长时间,例如6到12个月。

一种解决方法是将数据异步写入内存,然后在另一个线程中将其后台处理到磁盘。

数据应存储为文本还是二进制?

二进制数据通常比文本更有效,除非数据已经是文本格式。 通过将高度冗长的格式(例如XML或JSon)转换为二进制格式(在检索时会转换为文本),可以取得一些收益。 这是一种特定于格式的压缩,即使与普通压缩相比也可以很好地工作(请参阅下一个)

转换为二进制格式可以将数据大小减少3到10倍。 如果格式有损,则可以节省更多空间。 (例如,是否可以删除空格)如果还使用通用压缩,则压缩率可以达到20到200倍。

是否应该压缩数据?

压缩数据是CPU与消耗的空间之间的折衷。 对于使用更多CPU和进一步压缩数据的策略,有许多压缩策略要么使用更少的CPU,要么不进行压缩。

这不仅可以节省磁盘空间,还可以节省内存。 这使您可以扩展可以有效存储的数据量。

如果您有足够的内存,则可能要避免压缩以节省CPU。

如果您的数据条目很大,则压缩每个单独的条目可以很好地工作。 如果您的数据条目很小,则可以通过压缩条目块来获得显着收益。

您甚至可能需要一种混合方法,其中不压缩最新数据,而异步压缩长期数据。

如果使用通用压缩,则压缩比为5到50倍。

在React式系统中,使用者可以合并错过的更新吗?

如果您的系统使用速度较慢,则需要一种简单的方法来赶上。 您将始终拥有暂时落后的消费者,但是在某些系统中,他们可能会落后很长一段时间。 例如,在“编年史队列”中,使用者可以不仅仅停留在生产者后面,而不会删除更新。

如果您删除更新,则假设同一密钥有很多更新,或者有一个简单的合并策略,则可以Swift赶上。

有时您需要查看每个事件/消息/更改,无论它们多大。 这对于审核目的很有用。

您可能需要一种混合方法,其中记录了每个事件,但是某些使用者可以跳过键的最新更新。

批处理数据

在每笔事务开销较高的事务数据中,使用批处理确实有帮助。 批处理对于再次进行IO操作也很有用,以减少开销。

我们的大多数解决方案都试图将每笔交易的开销降至极低,以最大程度地减少延迟,因此添加批处理可能会带来比节省的开销更多的开销。

更强大的安全模型

您可能需要能够控制对单个集合的访问,但是可能还需要向每个单独的键添加访问控制列表。

您可能需要基于这些条目的内容访问条目。 例如,纽约的员工可能能够使用location = New York更新条目。 区域,组织或团队中的员工可以管理自己的数据。

时间戳变更

更新/事件应加盖时间戳。 这可能很有用,但是如果不使用的话,将带来不小的开销。

审核信息并简化安全性

进行更改后,您可能需要记录其他信息,例如; 谁,何时,从哪个客户进行更改。 这对于审核目的和简化安全模型很有用。

可以使用户意识到他们可以做自己需要做的事情,而不是进行严格的安全控制(用户可能会避免遇到的障碍而不是有用的障碍),但是所有更改都已记录下来,因此用户可能会更仔细地思考关于他们应该做什么。 如果您还具有撤消/更正所做更改的能力,则这可能是处理错误的另一种方法。

《纪事报》是开源的吗?

我们有两种开源数据存储解决方案,Chronicle Queue和Chronicle Map,它们可以很好地用于特定的用例,您不妨先尝试一下,看看它们是否满足您的需求。

Chronicle Journal的设计具有更高的可定制性,从而需要更多的咨询来实现解决方案。 因此,它在GitHub上,但只有拥有支持协议的客户才能访问。

如果您有兴趣获得包括记事本在内的Chronicle支持,请联系sales@chronicle.software

翻译自: https://www.javacodegeeks.com/2015/09/chronicle-journal-customizable-data-store.html

纪事本 乱码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

datavideo切换台说明书_【新品发布】datavideo SE-650 高清四通道切换台

还在为音乐演唱会的拍摄而烦恼吗?或者为体育比赛的多机位发愁?或者为微课、优课、慕课制作而焦头烂额?大部分用户对多机位的恐惧来源于相关产品令人发指的复杂和专业性,面对满眼的键盘会有无从下手之感,很多学校和工作…

NSA:建议从 C/C++ 切换到内存安全语言

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删美国国家安全局(NSA)发布了一份指南,旨在帮助软件开发商和运营商预防和缓解软件内存安全问题。其鼓励组织将编…

探索cqrs和事件源_编写基于事件的CQRS读取模型

探索cqrs和事件源关于事件源和CQRS的讨论似乎通常集中在CQRS上下文中的整体系统架构或领域驱动设计的各种形式。 但是,尽管也有一些有趣的考虑,但读取模型经常被忽略。 在本文中,我们将介绍通过使用事件流来填充视图模型的示例实现。 总览 …

shmmax单位_kernel.shmmax ,kernel.shmmni 和kernel.shmall

kernel.shmmax 2147483648//该参数定义了共享内存段的最大尺寸(以字节为单位)。其值应>sag_max_size初始化参数的大小,否则SAG由多个内存段构成,效率降低,还要不小于物理内存的一半,默认情况下在32位x86系统中,OracleSGA最大不能超过1.7GB.缺省为32M,对于oracle…

C# 11正式发布

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C# 11 现已发布。公告称,“随着每个版本的发布,社区的参与度越来越高,贡献了从建议、见解和错误报告到整个功…

java 自定义运算符_Java中集合的自定义运算符

java 自定义运算符总览 操作员重载有多种语言可用。 Java对String类型的运算符的支持对运算符的重载非常有限。 我们可以利用其他语言支持运算符的不同方式,但是我们可以在Java中实现一个使用Java已经使用的约定的实现。 获取,设置和放置操作 集合的运…

marker主题 ros_(五)ROS主题理解

参考网址:1,小海龟例子(1) 在新的终端打开roscore$ roscore---如果出错,请确定关闭所有ROS命令或者路径,重试。(2) 在新的终端打开运行小海龟界面$ rosrun turtlesimturtlesim_node得到结果&…

分享一个通用的嵌入式驱动层

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C 语言面向对象编程的最佳实践一、前言以STM32为例,打开网络上下载的例程或者是购买开发板自带的例程,都会发现应用层中会…

cks32和stm32_cks子,间谍,局部Mo子和短管

cks32和stm32本文是我们名为“ 用Mockito测试 ”的学院课程的一部分。 在本课程中,您将深入了解Mockito的魔力。 您将了解有关“模拟”,“间谍”和“部分模拟”的信息,以及它们相应的存根行为。 您还将看到使用测试双打和对象匹配器进行验证…

CSON+CJSON,解析json数据更优雅?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删前言json是目前最为流行的文本数据传输格式,特别是在网络通信上广泛应用,随着物联网的兴起,在嵌入式设备上&a…

服务总线yali测试_服务器的压力测试方法与流程

本发明涉及服务器的测试技术领域,特别是涉及一种包括超路径互联总线的服务器的压力测试方法。技术背景QPI(Quick Path Interconnect,快速通道互联)总线技术是一种取代前端总线(FSB)的CPU(处理器)间点对点连接技术。英特尔公司在2017年发起UPI(Ultra Path…

deprecated_@Deprecated新外观可能是什么?

deprecatedJDK增强建议 (JEP)277(“ 增强的弃用 ”)建议“重新定义弃用注释,并提供加强功能生命周期尾端的工具。” 当前 java.lang.Deprecated的一些限制使我困扰了一段时间。 我特别希望能够使用Deprecated提供文本&…

轨道运营管理专业自荐书_轨道运营管理专业自荐信x

轨道运营管理专业自荐信尊敬的领导:您好!非常感谢您们在百忙之中审阅我的求职资料。这对一个即将步入社 会的学子来说是莫大的鼓舞。我是西安联合学院城市轨道运营管理专业的一名学生, 2011年 7 月即将步 入社会,心情是那么的激动…

让C语言源码可知自身函数的实际地址与大小

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删事情的起因大概是这样……在很久很久以前,我最早用的是MASM(Win32ASM)写程序,从平台兼容性、开发…

java设计模式迭代器模式_迭代器设计模式示例

java设计模式迭代器模式本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查…

平衡二叉树 C语言代码实现

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删1.什么是平衡二叉树平衡二叉树,我们也称【二叉平衡搜索树/AVL】,树中任何节点的两个子树的高度最大差别为1,巴拉巴拉。。…

api报错 javaee maven_maven test 换javaee6 无法加载spring的配置文件 ?报错-问答-阿里云开发者社区-阿里云...

maven 构建的springmvc项目,执行mvn test 时 如果是org.apache.openejbjavaee-api5.0-3那么执行test可以通过如果将version改为6.0-3 则报错, Failed to load ApplicationContextTest:RunWith(SpringJUnit4ClassRunner.class)ContextConfiguration(locations "classpath*…

研发项目wbs分解简单案例_做项目WBS(工作分解结构)

显示视图栏:右键左边灰色,选“视图栏”。预先设置:文件---》选项,可以设置日期等格式信息,比如可以把日期格式改成2009年1月28日 12:33, 把工期显示单位改成小时数,这样我们可以做更细的任务分解。新建日历…

hystrix熔断 简介_Hystrix简介–总结

hystrix熔断 简介这是其他两篇文章的后续文章– 动机 ,说明为什么在分布式系统中需要类似Hystrix的内容以及Hystrix的基本介绍 。 这将是我的Hystrix旅程的总结,其中包含各种属性的详细信息,这些属性可以进行调整以更改Hystrix的行为&#x…

UDP/TCP 包的大小限制知多少

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删一、MTU 简述 - 分包后数据包最大长度1、定义Maximum Transmission Unit(最大可传输单元) 的缩写,它的单位是…