GraphQL、Dash和Grafana哪个才是最佳“王者”?
全文共4371字,预计学习时长13分钟
图源:Unsplash
本期小芯给大家带来的是GraphQL、Grafana 和Dash大乱战,科普向,让你茶余饭后的闲谈多一份科学的气息(高大上的谈资)。
如果你对数据科学、数据操作或者数据可视化感兴趣,那就更好啦,本文是你不可错过的最佳选择。
标题里的这些词,相信你已经听过。接下来,小芯将对它们进行逐一的详细介绍,然后进行比较。
我们开始吧~
GraphQL、Grafana 和Dash
在以上三个工具中,除了GraphQL外,另外两个用于数据可视化。
如今的数据可视化工具不再是Microsoft Excel电子表格所使用的标准图表了。它们以更复杂的方式显示数据,如信息图、表盘和仪表、地理图、波形图、热图以及精细的条形图、饼图和散点图。
这些图像可能包括交互功能,使用户可以操作它们或深入数据进行查询分析。还可能包括指示器,用来在数据更新或出现预定义条件时提醒用户。数据可视化已经成为现代商业智能约定俗成的标准。
无论如何,为使数据可视化,首先必须从某个来源中提取出数据。这个来源可以是传感系统、API、数据库等。同时需要理解数据的不同特征,并从中提取出有意义的、重要的和有趣的属性。
数据提取还用来执行探索性分析,并从数据中提取相关信息。用于数据操作的方法和技术有很多,如Pandas、 R、 SQL、GraphQL等。所以我选取的主题之一GraphQL也是一种数据提取方法,但是与其它方法有很大的不同。
因此,首先从GraphQL开始吧。
GraphQL是什么?
如今大多数应用程序都需要从服务端中获取数据,而这些数据被存储在数据库中。API应该为存储数据提供符合应用程序需要的接口。否则,就需要对通过API获取的数据进行某种过滤,以满足应用程序的需要。
大多数人把GraphQL错当作是一种数据库技术。这不是很准确,因为GraphQL是针对API的查询语言,而非数据库。从这种意义上说,它与数据库无关,但可以在使用API的任何环境中有效使用。它支持声明式数据获取,因此可以与React/React Native完美结合,作为构建用户接口的声明性框架。GraphQL可以补充或完全替代REST API的使用。
REST和GraphQL的主要不同在于,RESTful API有多个端点用于返回固定的数据结构,而GraphQL服务端只暴露一个端点就能返回灵活的数据结构。
使用RESTful API最终会获得不需要的数据。例如,当调用environment/build/<id>端点时,会获得所有和该特定build相关的数据。你可能会获得这些返回数据,如date_created, date_updated, status等,但我们需要的只是作者的名字。这是RESTful API过度获取的一个明显的例子。
当调用environment/build/<id>端点不足以检索到我们要查找的内容时,为了获取build所属的代码库,必须调用另一个端点environment/build/<id>/codebases。这种情况称为不足获取。
GraphQL使用自己的类型系统来定义API的模式,其语法称为模式定义语言(SDL)。这个模式在服务端和客户端间起着桥梁作用,定义客户端如何访问数据。
因为前端可以轻松的测试模拟数据,所以一旦模式定义好,前端和后端开发人员就可以独立工作了。前端还可以从模式中获取有用信息,如类型、查询和变异。模式还提供型别安全,可以尽早捕获类型错误,这对前后端的开发很有帮助。
查询示例:
query {
books {
id
title
author
isbn
price }
}
在这个示例中,GraphQL服务端提供了单端点,调用这个端点可以得到所有必要的数据,而不会过度获取或不足获取。
支持GraphQL的流行编程语言:
· C# / .NET
· Go
· Groovy
· Java
· JavaScript
· Kotlin
· PHP
· Python
· Ruby
· Scala
除了数据获取方面的提升,性能优化、版本控制和易于上手也是应该尝试GraphQL的一些原因。
Dash是什么?
Dash是用于构建响应式Web应用程序的开源python库。两年前它作为一种公开概念验证出现在GitHub上。我们把这个原型放在网上,但Dash的后续工作是在幕后进行的。我们使用来自银行、实验室和数据科学团队的私人试验的反馈来指导产品的改进。
现在,我们很高兴的宣布Dash的第一个公开版本不仅是企业级的,还是Plotly开源工具中的一流成员。如今,可以从python的包管理器使用 pip install dash下载Dash——它是完全开源的并且获得麻省理工学院授权。
来自Dash App Gallery的示例仪表盘
Dash使数据科学团队能够专注于数据和模型,同时仍可以开发和部署企业级应用程序。通常需要一组后端和前端开发人员队伍的任务都可以用Dash来完成。
Dash是一种基于python的框架,主要用于构建包含大量数据可视化的web应用程序。顾名思义,Dash专门用于创建基于web的仪表盘应用程序。但这需要在一些python库的帮助下,通过纯python或纯R来完成。
这特别适合那些用python或R语言处理数据的人。Dash抽象出了构建交互式的web应用程序所需的所有技术和协议,因此对于开发者更加便利。Dash现在有开源版本和企业版本。
我们可以通过有吸引力的主题和任意类型的图表来制作出色的数据可视化应用程序。它的美妙之处在于,它是由纯python或R语言完成的。进一步来说,因为可以使用python从头构建仪表盘,使用Dash时将有更大的灵活性。这样就可以创建自定义的仪表盘。
Dash写在Flask,Plotly.js和 React.js上,是构建拥有高度吸引力的仪表盘的数据可视化应用程序的理想工具。它尤其适合使用python进行数据处理的人。
Dash应用程序呈现在web浏览器上,因此是跨平台的和可移动的。Dash是一个高层框架,它抽象了图形、表格等UI组件的底层实现。
以下是使用Dash进行数据可视化的优点:
- 能创建可打印PDF格式的报告或者交互式的分析型web应用程序。
- 可自动汇报和监控数据流动
- 历史存档、版本控制、状态跟踪、便于审核和合规、创建制度记忆
由于Dash与之前讨论的两个框架相比是较新的框架,可以在这里得到关于Dash的整体描述性知识,以及如何使用Dash创建仪表盘。
Grafana是什么?
使用Grafana的气候站仪表板 (https://developers.bigclown.com/integrations/grafana-for-visualization)
Grafana是一个开源的、仪表盘式的分析监控平台,其支持多种数据源,如Elasticsearch, Influxdb, Graphite, Prometheus, AWS Cloud Watch等。最重要的是,Grafana能将几种数据源组合到一个仪表盘上,并添加行来组合单个面板(在UI中)。
使用Grafana可以查询、可视化、报警和了解存储在任意位置的指标,还可以创建、探索、共享仪表盘并培养数据驱动文化。
谈到身份验证,Grafana可以与LDAP, Google Auth, Grafana.com,Github集成。然而,当你的公司使用SSO(SingleSign-On即单点登录)之类的技术去处理身份验证时,Grafana使其与现有的工作流更加轻松的协同工作。
Grafana还拥有由社区构建的仪表板,可以通过数据源、面板类型、类别和收集器来选择它们。可以在这里浏览一些仪表板。
若有与Grafana兼容的数据来源,只需设置这些数据来源并创建所需要的面板,以可视化想要展示的内容。这将从只有一行的空仪表盘开始,可以在其中放任何种类和数量的面板,每个面板负责一个视觉效果。
可以选择自己喜欢的面板并增添到仪表盘上,就是这么简单。选择面板类型并探索与之交互的方式,可以轻松的创建动态和可重复使用的仪表盘,其中的变量作为下拉菜单出现在仪表盘顶部,可以在其中更改和交互。进一步可通过查询来深入查看视图。除此之外,还可以使用拆分视图来进行相互比较。
可以用最少的工作来创建活动仪表盘,甚至能单独查看日志。另一个有用的特性是为用户提供了为其重要指标定义警报规则的空间。Grafana会持续查找最新的数据,并向Slack、PagerDuty、VictorOps等系统发送通知。
Grafana是非常用户友好的工具,有大量吸引人的设计供用户选择。
比较
GraphQL与Dash和Grafana有明显不同,因为它可以查询存储在任何的地方的必要数据。GraphQL有助于准确得到所需的数据,不多也不少。在考虑如仪表盘这样的应用程序时,其在效率方面确实很有用。另外是,尽管许多权威人士和初创公司希望能说服所有人使用GraphQL,它不会取代REST。但GraphQL确实是一种查询和操作数据的简单高效的方法。
Grafana和Dash是对不同来源的数据进行可视化的工具。在Grafana中,通过点击仪表盘链接创建一个新的空白Grafana仪表盘。Grafana附带大量可添加到仪表盘上的面板。只有与某些类型的图形相关联时,面板才有用。图形依赖于数据,所以添加到仪表盘上的每个面板都与一个数据源相关联。所以Grafana会要求用户添加连接有数据源的预定义面板和图形。
而在Dash中,可以从头开始创建自定义的仪表盘。但在绘制图表和可视化数据方面,其操作又很容易。可以使用数据框架,并将其提供给Dash中的图形元素。所以Dash是可定制的并且是基于python的。Dash基于React和Flask,而Grafana是用Go语言(由谷歌创建)和Node.js编写的。尽管你可能认为使用Dash更费时费力,但如果熟悉了python或者R语言,这并不困难。
总之,如果你需要创建一个仪表盘,建议尝试Grafana和Dash两者。哪个更好取决于需求。
图源:Unsplash
但是它们都提供了绚丽时尚的可视化效果,不仅信息量丰富同时还引人入胜。
当然如何灵活运用,还得看少侠你的神仙操作。
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范