- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您能告诉我,哪个数据结构具有InfluxDB,而哪个数据模型具有InfluxDB?是这个键值模型。我阅读了完整的文档,但没有听懂。
先感谢您!
最佳答案
1.数据模型和术语
InfluxDB数据库存储点。点由四个部分组成:度量,标签集,字段集和时间戳。
测量提供了一种关联可能具有不同标签集或字段集的相关点的方法。标签集是键值对的字典,用于存储带点的元数据。字段集是一组类型化的标量值-该点记录的数据。
点的序列化格式由[线路协议(protocol)]定义(如果您想了解更多详细信息,还可以包括其他示例和说明)。规范中的一个示例点有助于解释该术语:
”温度,机器= unit42,类型=组件内部= 32,外部= 100 1434055562000000035
测量是温度。
标签集是machine = unit42,type = assembly。标签集中的键,机器和类型称为标签键。标签集中的值unit42和assembly被称为标签值。
该字段集是internal = 32,external = 100。字段集中的内部和外部键称为字段键。字段集中的值32和100称为字段值。
每个点都存储在一个保留策略中的一个数据库中。数据库是用户,保留策略和点的容器。保留策略配置InfluxDB保留点的时间(持续时间),在群集中存储这些点的副本数(复制因子)以及分片组覆盖的时间范围(分片组持续时间)。保留策略使用户(对于数据库有效)可以轻松删除不再需要的旧数据。这是时间序列应用程序中的一种常见模式。
稍后,当我们描述写入路径在InfluxDB中的工作方式时,我们将解释复制因子,分片组和分片。
我们还需要开始使用另外一个术语:系列。系列只是说保留策略+度量+标签集的捷径。具有相同保留策略,度量和标签集的所有点都是同一系列的成员。
您可以引用[文档术语表]中的这些术语或本博客系列文章中可能使用的其他术语。
2.从客户那里获得积分
客户端POST点(以行协议(protocol)格式)指向InfluxDB的HTTP/write端点。积分可以单独发送;但是,为了提高效率,大多数应用程序都批量发送分数。一个典型的批次的大小从几百到几千个点不等。 POST通过查询参数指定数据库和可选的保留策略。如果未指定保留策略,则使用默认保留策略。正文中的所有点都将写入该数据库和保留策略。 POST正文中的点可以来自任意系列。批中的点不必来自同一度量或标签集。
当数据库接收到新的点时,它必须(1)使这些点具有持久性,以便在数据库或服务器崩溃的情况下可以将其恢复;以及(2)使这些点可查询。这篇文章集中在上半年,使观点持久。
3.持久存储点
为了使点持久,将每批写入并同步到预写日志(WAL)。 WAL是仅附加文件,仅在数据库恢复期间读取。为了节省空间和磁盘IO,在写入磁盘之前,先使用[快照压缩]压缩WAL中的每个批次。
虽然WAL格式有效地使传入数据具有持久性,但它对于读取来说是一种非常糟糕的格式-使其不适合支持查询。为了允许立即查询新数据,输入点也被写入内存缓存中。缓存是一种内存中数据结构,针对查询和插入性能进行了优化。高速缓存数据结构是序列到按时间排序的字段列表的映射。
WAL使新观点变得持久。缓存使新点可查询。如果在将高速缓存写入TSM文件之前系统崩溃或关闭,则在数据库启动时通过读取和重放WAL中存储的批处理来重新构建系统。
WAL和高速缓存的组合对于传入数据非常有效,但对于长期存储而言则不足。由于必须在启动时重播WAL,因此将其限制为合理的大小非常重要。缓存被限制为RAM的大小,这在许多时间序列的用例中也是不希望的。因此,需要对数据进行组织并将其写入磁盘上的长期存储块,这些存储块具有高效的大小(以便数据库可以存储很多点)并且对于查询有效。
时间序列查询通常是时间上的汇总-对有界时间范围内的点进行扫描,然后通过诸如平均值,最大值或移动窗口之类的汇总函数来减少这些查询。列式数据库存储技术非常适合这种查询模式,在该技术中,数据是按列而不是按行组织在磁盘上的。此外,柱状系统可以很好地压缩数据,从而满足有效存储数据的需求。关于列存储的文献很多。 [面向列的数据库系统]就是这样的概述。
时间序列应用程序通常会在一段时间后从存储中删除数据。例如,许多监视应用程序将在线存储最后一两个月的数据,以支持监视查询。如果已配置的生存时间到期,则从数据库中删除数据的效率必须很高。从列存储中删除点很昂贵,因此InfluxDB还将其列格式组织为有时间限制的块。当生存时间到期时,可以将有时间限制的文件从文件系统中删除,而无需对持久性数据进行大的更新。
最后,当InfluxDB作为集群系统运行时,它会在多台服务器之间复制数据,以在出现故障时提供可用性和持久性。
使用InfluxDB保留策略配置可选的生存时间,生存时间范围内的时间间隔的粒度以及副本数:
建立持续时间复制的保留政策[SHARD DURATION] [DEFAULT]
持续时间是可选的生存时间(如果数据不应过期,则将持续时间设置为INF)。 SHARD DURATION是有效期内的数据粒度。例如,一小时的分片持续时间与24小时的持续时间将数据库配置为存储24个一小时的分片。每小时,最旧的碎片从数据库中过期(删除)。设置REPLICATION可以配置复制因子,即群集中应存在多少个分片副本。
具体而言,数据库在磁盘上创建此物理数据组织:
''数据库主管/db
''保留策略目录/db/rp
''分片组(有时间限制)。 (逻辑)
''分片目录(db/rp/Id#)
''TSM0001.tsm(数据文件)
''TSM0002.tsm(数据文件)
''…
内存中高速缓存以TSM格式刷新到磁盘。刷新完成后,已刷新的点将从缓存中删除,并且相应的WAL被截断。 (也按分片维护WAL和高速缓存。)TSM数据文件存储按列组织的点。一旦写入,TSM文件是不可变的。 [InfluxDB文档]中提供了TSM文件布局的详细说明。
4.压缩持久点
缓存是相对少量的数据。当TSM列格式可以在一个块中存储序列的长期值时,效果最好。较长的运行时间既可以产生更好的压缩效果,又可以减少扫描字段以进行查询的过程。 TSM格式主要基于日志结构的合并树。新的(第一级)TSM文件是由高速缓存刷新生成的。这些文件随后被合并(压缩)为第二级文件。第二级文件进一步合并为第三级文件。随着文件变大并最终变冷(在写入时它们涵盖的时间范围不再很热),会发生其他级别的压缩。上面的文档引用提供了详细的压缩描述。
TSM压缩代码中包含很多逻辑和复杂性。但是,高层目标很简单:长期将一系列值组织在一起,以最佳地优化压缩和扫描查询。
引用:https://www.influxdata.com/blog/influxdb-internals-101-part-one/
关于database - InfluxDB数据结构和数据库模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44971676/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!