整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Axure高阶教程:利用JavaScript制作实时天气显示APP

大家用Axure制作APP原型时,即使高保真效果也只是在视觉层面上实现了原型效果,但页面中的数据内容还都只是预先设定好的,例如:使用中继器、表格等,模拟真实作品。那么有没有一种方法,让我们制作的原型也能获取到真实数据呢?

本例通过JavaScript实现实时获取天气功能,意在激发大家兴趣,制作更多基于Axure获取实时信息的案例。废话不多说,上图为敬:

这个原型到底有什么独特之处吗?在刚打开的时候,整个页面呈现的数据都是之前设定好的,当点击左上角的『刷新』的时候,页面会通过一个天气查询api获取到当前真实数据,然后加载出来。怎么样,是不是被它吸引到了?

原理

这个实例中主要用到了Axure的以下几个功能:

(1)中继器

由于『昨天』、『今天』、『明天』的天气概要布局相同,可以使用中继器更加规范显示。

(2)JavaScript

在获取天气api时,通过Ajax的GET方式从天气api服务器中获取实时数据。

(3)全局变量

接收并储存获取到的实时数据。

(4)字符串函数

通过indexOf、replace、slice等字符串函数对接收到的数据进行加工,之后存储到中继器中。

以下为整个实例流程图:

功能实现

1. 获取api数据

在本例中,我们通过『http://t.weather.sojson.com/api/weather/city/101010100』api获取到北京天气的实时数据,大家可以看到,数据是以json格式返回的,此接口可以获得当天的天气详情和从昨天到未来15天的天气数据。

那么Axure是如何实现调用api的呢?

我们先设定一个全局变量『tianqi』,当点击刷新按钮时,先设置全局变量值为空,再通过『打开链接』功能插入Javascript脚本,参数选择「链接外部网址」,「打开当前窗口」调用api并赋值给全局变量。

javascript:

$.ajax({

method: ‘GET’,

url: ‘http://t.weather.sojson.com/api/weather/city/101010100’,

data: {}

}).done(function(msg){

$axure.setGlobalVariable(‘tianqi’, JSON.stringify(msg));

});

这段JavaScript代码的意思就是调用JavaScript,通过「ajax」对象的「GET」方式,从「http://t.weather.sojson.com/api/weather/city/101010100」地址获取数据,因为这个api不需要传递参数,所以「data」字段并没有赋值。之后将获取到的数据通过「JSON.stringify」转为字符串后赋值给全局变量「tianqi」。

怎么样?是不是很神奇。

如果你不明白,去百度下ajax的「GET」方法就能略知一二了。通过这一步,我们的全局变量「tianqi」就已经获取到了实时的天气数据。那么之后怎么加工呢?

2. 格式化数据

目前的全局变量值如下图,是没办法直接使用的。那我们如何格式化这些数据呢,这时就需要字符串函数了。

如图所示,整个数据中包含了2部分,第一部分是当天的天气情况,第二部分是从昨天开始到之后的十五天天气情况。由于时间关系,本次实例中只使用到了「第一部分」和「昨天到明天」的天气情况。

我们首先创建4个文本框,这4个文本框分别保存「当天天气情况」、「昨天天气情况」、「今天天气情况」、「明天天气情况」。然后通过『设置文本』功能对文本框赋值,其中「当天天气情况」的赋值函数为:

[[tianqi.substring(tianqi.indexOf(‘shidu’),tianqi.indexOf(‘yesterday’))]]

这句话什么意思呢?就是说截取「tianqi」字符串中从「shidu」字段到「yesterday」字段的字符。

3. 更新天气数据

目前我们获得了4段数据,分别为「当天天气情况」、「昨天天气情况」、「今天天气情况」、「明天天气情况」。这样就简单多了,当我们需要当天的温度是,直接从「当天天气情况」数据中查找对应的「wendu」就可以了。

目前「当天天气情况」数据如下:

shidu”:”16%”,”pm25″:11.0,”pm10″:23.0,”quality”:”优”,”wendu“:”16″,”ganmao”:”各类人群可自由活动”,”yesterday

我们很容易看到,「wendu」的数值是「16」。如何截取呢?我们通过以下函数将「16」赋值给页面中的『温度』字段。其中「LVAR1」为「当天天气情况」元件的元件文字。

[[LVAR1.slice(LVAR1.indexOf(‘wendu’)+8,LVAR1.indexOf(‘wendu’)+10)]]

4. 更新中继器数据

如前所述,页面中的「昨天」、「今天」、「明天」天气情况我们通过中继器储存。更新中继器数据我们通过『更新行』动作实现。

对应的赋值函数同样通过字符串函数实现,例如「天气类型」函数如下,LVAR1为「昨天天气情况」元件的元件文字:

[[LVAR1.slice(LVAR1.indexOf(‘type’)+7,LVAR1.indexOf(‘type’)+8)]]

至此,大功告成,我们的页面已经加载了实时的天气信息。

后记

这个有用吗?

作为一名产品经理,如果连自己最常用的软件都不喜欢琢磨,何谈自己要开发的产品呢?

通过这种获取api的方式,我们可以制作更多实时、真实的案例,在网上有无数的api,例如大小写转换、MD5加密、归属地查询、车辆限行,如果我们做的案例中能得当的使用这些功能,不是更好吗?更进一步,如果懂得开发,我们完全可以为了原型演示开发一个特定的api,实现相应功能。

一些问题

  • JavaScript接口http限制:目前测试后已知的限制是,如果接口不是https协议,原型在axshare上无法获取数据,原因是axshare禁止调用http接口。
  • JavaScript接口跨域问题:在网上测试了一些接口,发现使用ajax方法调用时会产生跨域问题,导致无法接收到数据,具体解决方法没有找到,如果有方法欢迎留言。
  • 接口不稳定解决办法:目前通过循环调用直到接口返回正常数据时结束。
  • 获取到的数据是object:记得使用『JSON.stringify』转换接收到的数据,因为数据可能是json类型,要转换为字符串才能使用。
  • 案例优化:本天气案例基于小米手机系统天气app。由于时间关系只制作了首页,其他滑动及点击效果之后有时间可能会更新。

欢迎留言讨论。

本文由 @escher 原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自PEXELS,基于CC0协议

TOC

数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell:https://blog.csdn.net/weixin_42526326/article/details/121148721

什么是CDC?

CDC(Change Data Capture)是变更数据获取的简称。可以基于增量日志,以极低的侵入性来完成增量数据捕获的工作。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。

简单来讲:CDC是指从源数据库捕获到数据和数据结构(也称为模式)的增量变更,近乎实时地将这些变更,传播到其他数据库或应用程序之处。 通过这种方式,CDC能够向数据仓库提供高效、低延迟的数据传输,以便信息被及时转换并交付给专供分析的应用程序。

与批量复制相比,变更数据的捕获通常具有如下三项基本优势:

  • CDC通过仅发送增量的变更,来降低通过网络传输数据的成本。
  • CDC可以帮助用户根据最新的数据做出更快、更准确的决策。例如,CDC会将事务直接传输到专供分析的应用上。
  • CDC最大限度地减少了对于生产环境网络流量的干扰。

CDC工具对比

特色

Canal

mysql_stream

go-mysql-transfer

Maxwell

开发语言

Java

Python

Golang

Java

高可用

支持

支持

支持

支持

接收端

编码定制

Kafka等(MQ)

Redis、MongoDB、Elasticsearch、RabbitMQ、Kafka、RocketMQ、HTTP API 等

Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件等

全量数据初始化

不支持

支持

支持

支持

数据格式

编码定制

Json(固定格式)

Json(规则配置) 模板语法 Lua脚本

JSON

性能(4-8TPS)





实现原理:

1、go-mysql-transfer将自己伪装成MySQL的Slave,

2、向Master发送dump协议获取binlog,解析binlog并生成消息

3、将生成的消息实时、批量发送给接收端

Mysql binlog 讲解:

MySQL的二进制日志可以说MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句, 以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

一般来说开启二进制日志大概会有1%的性能损耗。

二进制日志两个最重要的使用场景:

  • MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
  • 数据恢复,通过使用mysqlbinlog工具来使恢复数据。

二进制日志包括两类文件:

  • 二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件
  • 二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

binlog文件的滚动:

  • 达到了滚动的大小
  • mysql服务停止

mysql binlog的三种格式

在配置文件中可以选择配置 binlog_format= statement|mixed|row

  • ROW 模式(一般就用它)日志会记录每一行数据被修改的形式,不会记录执行 SQL 语句的上下文相关信息,只记录要修改的数据,哪条数据被修改了,修改成了什么样子,只有 value,不会有 SQL 多表关联的情况。优点:它仅仅只需要记录哪条数据被修改了,修改成什么样子了,所以它的日志内容会非常清楚地记录下每一行数据修改的细节,非常容易理解。缺点:ROW 模式下,特别是数据添加的情况下,所有执行的语句都会记录到日志中,都将以每行记录的修改来记录,这样会产生大量的日志内容。
  • STATEMENT 模式每条会修改数据的 SQL 语句都会被记录下来。缺点:由于它是记录的执行语句,所以,为了让这些语句在 slave 端也能正确执行,那他还必须记录每条语句在执行过程中的一些相关信息,也就是上下文信息,以保证所有语句在 slave 端被执行的时候能够得到和在 master 端执行时候相同的结果。但目前例如 step()函数在有些版本中就不能被正确复制,在存储过程中使用了 last-insert-id()函数,可能会使 slave 和 master 上得到不一致的 id,就是会出现数据不一致的情况,ROW 模式下就没有。
  • MIXED 模式以上两种模式都使用。

常见的数据采集工具(相关知识):

DataX、Flume、Canal、Sqoop、LogStash

DataX (处理离线数据)

DataX 是阿里巴巴开源的一个异构数据源离线同步工具,异构数据源离线同步指的是将源端数据同步到目的端,但是端与端的数据源类型种类繁多,在没有 DataX 之前,端与端的链路将组成一个复杂的网状结构,非常零散无法把同步核心逻辑抽象出来。

为了解决异构数据源同步问题,DataX 将复杂的网状的同步链路变成了星型数据链路,DataX 作为中间传输载体负责连接各种数据源。

所以,当需要接入一个新的数据源的时候,只需要将此数据源对接到 DataX,就可以跟已有的数据源做到无缝数据同步。

DataX本身作为离线数据同步框架,采用Framework+plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  1. Reader: 它为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  2. Writer: 它为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  3. Framework:它用于连接Reader和Writer,作为两者的数据传输通道,并处理缓冲、并发、数据转换等问题。

核心模块介绍:

  1. DataX完成单个数据同步的作业,我们把它称之为Job,DataX接收到一个Job之后,将启动一个进程来完成整个作业同步过程。
  2. DataX Job启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。
  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader->Channel->Writer的线程来完成任务同步工作。
  5. DataX作业运行完成之后,Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出。

Flume(处理实时数据)

Flume主要应用的场景是同步日志数据,主要包含三个组件:Source、Channel、Sink。

Flume最大的优点就是官网提供了丰富的Source、Channel、Sink,根据不同的业务需求,我们可以在官网查找相关配置。另外,Flume还提供了自定义这些组件的接口。

Logstash(处理离线数据)

Logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上过滤网,Logstash提供了很多功能强大的过滤网来满足各种应用场景。

Logstash是由JRuby编写,使用基于消息的简单架构,在JVM上运行。在管道内的数据流称之为event,它分为inputs阶段、filters阶段、outputs阶段。

Sqoop(处理离线数据)

Sqoop是Hadoop和关系型数据库之间传送数据的一种工具,它是用来从关系型数据库如MySQL到Hadoop的HDFS从Hadoop文件系统导出数据到关系型数据库。Sqoop底层用的还是MapReducer,用的时候一定要注意数据倾斜。

注:sqoop不是CDC工具 sqoop是基于查询的全量数据捕获.

参考:

https://www.cnblogs.com/zzz01/p/15263071.html

go-mysql-transfer产品手册

着昨天分享的大数据网站模板,今天再分享五个智慧交通 智慧金融 智慧气象H5大数据大屏幕展示html模板,也是非常的大气,全部都是写好的静态模板页面。

一.大数据视频监控模板

智慧交通大数据视频监控 大数据展板源文件 ,html+CSS+JS源文件,可通过浏览器运行预览,可直接使用。

二.高速交通大数据分析平台模板

一款蓝色风格很具科技感的html5全屏高速交通大数据分析平台页面模板,交通综合管理大数据可视化图表统计展示页面模板。

三.旅游大数据大屏模板

景区综合管理服务平台,统计景区内外客流数据,实时客流数据,客流总数,区域客流排名,新老客户占比,游客停留时长,各时段客流人数,历史客流等数据,并以图表的形式直观展示。监测人员可以实时查看对应监测点的实时客流数量,通过对全景区重点客流监测区域的实时监测和预警处理,提高预警处置能力。

四.银行企业信用风险实时监测模板

银行企业信用风险系统后台ECHART图表实时动态检测页面模板html下载

五.气象预报大数据平台模板

html5基于echart制作天气预报,气象预警大数据可视化管理界面模板。地理维度、空气温度、气象监测等大数据显示功能。包含:登录页面和投票主页面。

以上五个为云码素材收藏的智慧交通 智慧金融 智慧气象H5大数据,大屏展示模板,如果你喜欢,觉得有帮助,请收藏,转发。

获取下载方法,请关注云码素材,私信我。

欢迎关注云码素材,交流分享! 云码素材原创作品,更多精品资源下载,技术分享请关注,私信云码素材!