IoT SaaS加速器——助力阿尔茨海默病人护理

场景介绍

阿尔茨海默病,是导致中老年人认知功能障碍的最常见疾病之一,是发生在老年期及老年前期的一种原发性退行性脑病。据估计,全世界痴呆症患者数量为4700万,到2030年将达到7500万人。痴呆症患者数量到2050年预计将是现在的近三倍。疾病的高昂费用给卫生系统应对未来预计不断增加的病例构成挑战。据估计,目前每年的支出为8180亿美元,而支出的增长速度预计会比疾病流行率上升还要快。照料痴呆症患者给照护者带来巨大压力,包括身体上、情感上和经济上的压力。(by世界卫生组织)

用技术解决阿尔茨海默病护理的问题,让老人和其护理者有更好的生活质量,是我们可以解决的方法。基于物联网技术,已经有一些设备实现了阿尔茨海默病老人走失定位。但是我们要做更高一层,除了单独分发的硬件之外,我们要使用开发工具IoT Studio帮助医疗机构做一个硬件SaaS管理系统,让他们可以随时监控旗下所有阿尔兹海默护理设备的数据以及定位,对老人的情况实现实时监控。同时也有能力对掌控的设备进行增删改查,方便他们自己管理设备。通过IoT Studio赋能开发者,让他们帮助包括医疗在内的各个行业用上物联网技术,惠及百姓。

我们首先构建一个可以拍照,检测心跳的手环设备,然后基于这个设备帮助护理机构开发一个集合管理监控告警的SaaS系统。设备由一个可以检测心跳的光学模块,一个可以检测老人所在地场景的摄像头,一个GPS定位模块,一个物联网通讯模块(一般为GPRS),MCU和电源组成。云端由物联网平台为基础建立设备与云端通讯,配合RDS存储心跳&GPS数据,OSS存储图片数据,最后用IoT Studio的服务开发与Web可视化开发功能完成功能页面搭建。整个云端开发过程只需要2小时以内即可。

最终效果如图。

硬件部分

在demo阶段,我们采用树莓派3B+摄像头+心跳模块+GPS+电池的方法,验证不同数据的上报方法以及数据存储链路。考虑简单化,联网暂时采用WIFI方法。如果觉得使用电路比较麻烦,也可以使用服务开发+虚拟设备上报的方式,具体查看这篇文档。

虽然带手环的老人不一样,但是每个手环上报的属性类别是一样的,我们可以类似编程开发里把它们归结为同一个类(class)。我们首先需要在物联网平台上为我们的demo手环建立一个设备类(即产品),这样我们才能在以后不断的往这个产品下实例化新的设备。
进入阿里云物联网平台,在产品页面新建一个产品,选择自定义品类即可,命名为“阿尔茨海默氏症老人监控手环”。

进入产品的功能定义页,定义5个自定义功能——剩余电量,地理位置,心跳,图片地址(存放摄像机上传图片的URL)。

地理位置只需要在“添加功能”里用标准的功能即可,如图,其他全部配置项默认即可。

心跳为一个整型数据,剩余电量为浮点型数据,图片地址为字符型数据,如图。

在设备面板点击“添加设备”,选择刚才创建的手环产品,然后输入随意的设备名称即可。

IoT Studio为交付型业务做了项目维度的隔离,因此需要将用到的设备导入到对应的项目中。
首先打开物联网平台的“开发服务”选项进入IoT Studio。点击某个项目名称的“查看”进入项目详情页。然后点击右上角的“导入产品”。选择刚才的手环产品,然后导入,可以在设备管理页看到产品以及下属的设备已经导入项目里。

这样就完成了产品的定义,实例化与项目维度的隔离了。

上云部分

树莓派采用python编程,因此我们需要参考物联网平台的python SDK,同时开发者社区也有很多相关文章。在这里我们直接跳过。
由于物联网平台的属性不支持直接存储图片,因此我们暂时使用oss进行存储。你也可以选择使用HTTP/2通道(已支持python SDK)将图片上传至物联网平台每个设备单独的存储空间,不过从该存储空间调用图片的URL需要动态生成,可以参考这篇文档。

OSS存储空间准备

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以通过调用 API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过 Web 控制台对数据进行简单的管理。OSS 适合存放任意类型的文件,适合各种网站、开发企业及开发者使用。

首先点击“立即开通”进入开通页面并点击同意协议。

然后进入控制台,新建一个Bucket,一个Bucket相当于一个文件夹,可以通过API路径访问里面的文件。在这里我们选择公共读写。

然后可以看到OSS控制台新建了一个bucket,里面是空的,我们可以尝试上传一些图片。

然后点击文件右方的操作项里的“复制文件URL”,把复制的URL粘贴到浏览器,看看能否预览。

可以看到通过URL访问我们就能看到图片了,这样OSS的配置就完成了。

考虑到Bucket的公共读写特性,安全性会有一定的问题,可以考虑将bucket私有化,然后图片上传的时候设置图片为公共读写,并采用时间戳加盐等方式将图片文件名随机化的方式解决。当然安全性上HTTP/2通道为更优方案。

树莓派代码

树莓派的配置与连接在此不再赘述,可以在树莓派新建py文件,直接将此份代码复制过去,并且设置为开机执行,也可以参考这篇文档。
代码如下(基于python 3.6),需要根据备注填入自己的账号信息,产品信息等:

##注意,本demo代码忽略了电池电量检测模块import aliyunsdkiotclient.AliyunIotMqttClient as iot ##导入阿里云的设备MQTT库,如果import失败需要先pip3 install 一下
import json
import multiprocessing
import time
import random
import oss2 ##导入阿里云的OSS库,如果import失败需要先pip3 install oss2
from picamera import PiCamera ##树莓派的摄像头,系统自带
import RPi.GPIO as GPIO ##GPIO口,接红外PIR用
import serial
import pynmea2
from pulsesensor import Pulsesensor ##导入树莓派的pulsesensor库,https://github.com/tutRPi/Raspberry-Pi-Heartbeat-Pulse-Sensor/blob/master/example.pyauth = oss2.Auth('**AccessId*****','**AccessSecret*****') ##OSS的授权需要阿里云账号AccessId和AccessSecret,具体查看https://usercenter.console.aliyun.com/#/manage/ak
bucket = oss2.Bucket(auth,'http://oss-cn-beijing.aliyuncs.com','***你的bucket名称***') ##需要根据服务器区域修改节点路径,见文档
global picURLtoIoT
camera = PiCamera()
camera.resolution = (800,600)  ##拍照分辨率,越高越容易分析,但是上次越慢
GlobalBpm = 0  ##记录心跳数据
Latitude = 0    ##记录GPS数据
Longtitude = 0##初始化树莓派
def init(): GPIO.setwarnings(False)GPIO.setmode(GPIO.BOARD)GPIO.setup(3, GPIO.IN)passdef take_photo():ticks = int(time.time())fileName = 'test%s.jpg' % ticks  ##在文件名加入了时间戳作为简易加密手段filePath = '/home/pi/Pictures/%s' % fileNamecamera.capture(filePath)bucket.put_object_from_file('bucket_file_name/%s', fileName) ##在这里改bucket名字global picURLtoIoTpicURLtoIoT = 'http://***你的bucket名称**.oss-cn-beijing.aliyuncs.com/bucket_file_name/%s' % fileName##在这里改bucket名字和bucket内文件夹的名字print(str(picURLtoIoT))def detect_Heartbeat():p = Pulsesensor()p.startAsyncBPM()try:while True:bpm = p.BPMif bpm > 0:print("BPM: %d" % bpm)GlobalBpm = bpm;else:print("No Heartbeat found")time.sleep(1)except:p.stopAsyncBPM()def get_GPS():ser = serial.Serial("/dev/ttyAMA0",9600)while True:line = ser.readline()if line.startswith('$GNRMC'):rmc = pynmea2.parse(line)print "Latitude:  ", float(rmc.lat)/100print "Longitude: ", float(rmc.lon)/100Latitude = float(rmc.lat)/100Longtitude = float(rmc.lon)/100break options = {'productKey':'**你的ProductKey**','deviceName':'**你的deviceName**','deviceSecret':'**你的deviceSecret**','port':1883,'host':'iot-as-mqtt.cn-shanghai.aliyuncs.com' ##注意阿里云IoT国内都是华东2,不一定跟OSS的节点一致
}
host = options['productKey'] + '.' + options['host']def on_message(client, userdata, msg):topic = '/' + productKey + '/' + deviceName + '/update'print(msg.payload)def on_connect(client, userdata, flags_dict, rc):print("Connected with result code " + str(rc))def on_disconnect(client, userdata, flags_dict, rc):print("Disconnected.")##设备上报的定义
def upload_device(client):topic = '/sys/'+options['productKey']+'/'+options['deviceName']+'/thing/event/property/post'while True:payload_json = {'id': int(time.time()),'params': {'BPM': GlobalBpm,'picURL': picURLtoIoT,'Geo': {'CoordinateSystem":1,'Latitude':Latitdue,'Longitude':Longtitude,'Altitude':0},},'method': "thing.event.property.post"}print('send data to iot server: ' + str(payload_json))        client.publish(topic, payload=str(payload_json))if __name__ == '__main__':client = iot.getAliyunIotMqttClient(options['productKey'], options['deviceName'], options['deviceSecret'], secure_mode=3)client.on_connect = on_connectclient.connect(host=host, port=options['port'], keepalive=60)p = multiprocessing.Process(target=upload_device, args=(client,))p.start()get_GPS()detect_Heartbeat()take_photo()GPIO.cleanup()client.loop_forever()

结束,把这个python文件设置为开机运行即可。

调试

可以看到数据已经上报到物联网平台了,同时oss的链接也可以用。

数据部分

接下来将演示如何通过IoT Studio服务开发工作台完成设备上报数据的转储以及根据规则进行告警(如心跳过低告警)。IoT Studio 服务开发是一个物联网业务逻辑的开发工具。通过编排服务节点的方式快速完成简单的物联网业务逻辑的设计。适用于以下场景:设备联动、设备数据处理、设备与服务联动、生成API 、生成App的后端服务等。

开通RDS

阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。目前六月份有10块钱试用半年的折扣,可以尝试购买。

开通以后进入管理控制台,会看到自己已经付费的实例出现,进入管理。

由于我们需要用外部的服务调用RDS数据录入,因此需要允许外网访问,需要首先设置白名单。然后把默认的127.0.0.1改为0.0.0.0/0

然后返回管理页,可以看到外网地址出现了。

接下来需要设置登录数据库的账号,进入账号管理页点击创建账号,输入账号密码等信息,并且选择要授权的数据库。

完成后返回实例控制页,点击登录数据库,输入刚才设置的账号密码,即可登入RDS数据库。


3)

登录之后首先创建一个数据库,命名为test,然后刷新一下,可以看到新建的test数据库,然后进入数据库建立一张表。

插入如下的几列,注意time可能需要改为timestamp类型,最后保存即可完成。这样就完成了表结构的配置。

数据对接RDS

首先在物联网平台首页,开发服务下的IoT Studio的快速入口进入服务开发工作台。然后新建一个服务,命名为“手环心跳转储RDS”。

然后在节点列表里选择“设备触发”节点,在右侧栏选择之前创建的产品“阿尔茨海默氏症监控手环”,监听所有设备的属性上报,如图。

接下来选择一个云数据库mySQL节点,将设备触发节点与云数据库节点连接起来。

参数如下,分别对应之前的列名,record不填,因为record会自动增长:

{"table": "test",![_rds5](https://yqfile.alicdn.com/d0979c17aa88ac03cd75ae1752c0b85e6b47fc23.png)"rows": [{"BPM": "{{query.props.BPM.value}}","Latitude": "{{query.GeoLocation.value.Latitude}}","Longtitude": "{{query.GeoLocation.value.Longtitude}}","time": "{{query.deviceContext.gmtCreate}}"}]
}

数据格式说明

我们可以看到,设备上报的数据格式设这样的:

{"deviceContext": {"productKey": "a1OhdcX0B8B","deviceName": "Wrist003","gmtCreate": 1560497545957},"props": {"GeoLocation": {"time": 1560497545957,"value": {"CoordinateSystem": 1,"Latitude": 25.26,"Longitude": 111.45,"Altitude": 0}},"BPM": {"time": 1560497545957,"value": 21}}}

在服务开发中,如果需要在json参数里调用外部动态的参数,需要采用{{xx.xx}}的方式调用。如在"BPM": "{{query.props.BPM.value}}"里,第一个query表示参数来自于第一个节点,第二个props表示取设备上报上来的属性数据,第三个BPM表示取props下的BPM对象,最后的value表示取BPM对象的值。同理其他几个可以根据设备上报数据的结构进行填写。
完成后点击部署,调试(可以使用虚拟设备上报),回到RDS的数据库页面,可以看到数据更新了。这样就完成设备数据上报转RDS的操作。

数据即时告警规则

如果老人的心跳过低,我们会通过钉钉机器人把消息通知到护士群里,让他们即时知晓情况。
首先仍然是新建一个服务,命名为心跳过低告警。

然后同样选择一个设备触发节点,侦听所有手环设备上报的属性。

添加一个“条件判断”节点,条件节点相当于一个if-else判断。并且把设备触发节点与条件节点连接起来。

在条件判断节点中,第一个选择“同时满足所有条件”,在“条件1”中第一个下拉框选择“设备触发”,在二级菜单选择“心跳”;判断条件选择“<=”,第二个框选择“静态值”“数值”。触发报警的条件我们设置为老人心跳值小于50。

在之前的数据对接RDS里,我们使用代码化的query.props.BPM.value定义设备数值。而在条件判断等节点中,我们封装了数据源格式,可以让你直接选择数据源进行规定格式的告警信息配置,而无需输入query/payload等变量。

接下来在左侧节点列表的“功能”类拖入一个“钉钉机器人”节点。并与条件判断节点的上方出口(“满足条件”)进行连线。选择模板为“设备告警”模板,数据源选择“设备触发”“心跳”,可以选择@所有人。
钉钉机器人的Webhook填入你要推送的钉钉群的钉钉机器人Webhook。

如何获取Webhook?

钉钉机器人是钉钉群内一个自动化的消息发送工具。在一个钉钉群内打开右上角的“群设置”,可以发现以下弹窗。

点击钉钉机器人,进入机器人配置页面。

选择添加自定义机器人。

然后在完成页面可以看到webhook。整个复制下来,粘贴到输入框内。

如果是自定义模板,如何动态配置文本text?

由于监听了全部的煤气检测器,我们收到警告的时候需要知道是哪个煤气检测器报警了,因此需要接受上报的煤气检测器的DeviceName进行推送。

选择text推送类型,参数框内为一个json对象,因此调用方法要符合json的格式。我们采用了{{value}}的格式,如“{{query.deviceContext.deviceName}}”,可以查看下图的完整配置方法:

{"msgtype": "text", "text": {"content": "使用手环{{query.deviceContext.deviceName}}的老人心跳过低,数字为{{query.props.BPM.value}},大家快去看看吧!"}, "at": {"isAtAll": true}
}

对条件判断节点的“不满足条件”,放置一个不做任何处理的nodejs脚本占位即可。

完成后,同样的进行部署启动调试。在虚拟设备那边上报一个小于50的BPM,看看是否成功响应。这样就完成了一个即时响应的心跳告警功能。

应用部分

本次的应用部分包括设备管理的页面,允许医院维护人员查看各个设备的状态,属性并根据需求添加新的设备。另外有当前所有设备在地图上的分布情况,方便监控老人动向。最后包含了一个监控手环上报图片的实时查看功能,可以查看老人有没有遇到危险,迷路等。
最终的实现效果如图:

手环管理SaaS创建

首先进入IoT  Studio页,点击Web可视化开发,进入Web可视化页面。

然后新建一个空白模板,输入应用的名字,如“阿尔兹海默症示例应用”。

进入空白的Web页面,准备开始搭建我们的应用。

左侧栏的构建

首先把整个应用的架构搭建好,创建5个页面,分别为医院监控大屏,医院设备管理,老人1的详情页,老人2的详情页,老人3的详情页。

接下来我们为整个应用添加一个左侧栏,点击左下方的“导航菜单”。

由于我们已经建好了对应的空页面,可以选择自动生成。

可以看到生成的左侧菜单栏,现在想把老人1,2,3三个页面归属到一个“老人监控”的主分类下,因此需要修改配置菜单项。点击左下角的“配置菜单”。此外这里修改了分辨率为1440x900。

点击新增主菜单,输入“老人监控”这个主分类名。这个主类目不会对应任何实际的页面链接,只是一个分隔符。

出现二次确认弹窗确认即可。

最后改成这样的结果。可以检查一下里面的链接是否正确的配置。

可以看到左侧菜单出现了“老人监管”这个分类。

配置页面基本元素&样式

想要SaaS应用的样式与众不同?可以自定义各种样式,也可以使用标准模板。

使用标准模板可以在新建页面的时候点击。

也可以根据自己的喜好,用空白模板,然后自定义样式,比如修改菜单栏颜色。

修改背景颜色。

放入一些图片。

输入文字等装饰。最后变成这样的页面。

接下来我们需要添加一些有功能的组件,让整个SaaS应用运作起来。

医院监控大屏页

如同示例,我们需要一个指示设备GIS的地图以及一个展示设备状况的列表。在组件栏对应的是这两个组件。

设备地图

设备地图需要用到物联网平台数据分析功能的空间数据可视化服务。过程如下图gif显示,首先在左侧栏拖入地图组件,然后点击添加场景,前往空间数据可视化页面,然后点击添加,选择“阿尔兹海默症手环”产品,点击确定。

_gis

可以修改地图主题色等。

gis_

选择后返回IoT Studio,重新点击地图组件选择刚才创建的场景,就可以看到在页面上出现了一份有设备位置的地图。

可以调节大小,放到合适的位置上,就完成了地图组件的配置了。

设备属性表格

设备属性表单可以把当前产品下所有设备(手环)的在线状态,更新时间以及属性快照值的显示出来,并且在应用发布后可以调整显示的列内容。适合全局性的设备预览。

首先拖入设备属性组件,在右侧栏配置要关联的产品。

_

可以看到关联了产品后,表单自动显示产品下的全部设备。接下来我们可以修改一下右侧的配置项,让他的样式更符合黑色的背景。

_

然后我们可以点击右上角预览,查看一下页面效果。可以在预览时点击“列显示设置”按钮修改显示的列数,这个配置是本地存储的,不会同步到云端。

_

这样第一个医院监控大屏页面就完成了。

医院设备管理页

设备管理页允许运维人员(而不是开发者)直接添加新设备获取三元组,这样他们就可以不感知阿里云物联网平台而实现设备的添加。为了实现这个功能,需要设备管理这个表单组件,如图。

配置方法为:首先从左侧栏拖入设备属性组件,然后在右侧栏修改一些配置项——包括是否允许发布之后用户添加/编辑/删除设备,修改列显示排序,添加自定义标签,修改样式等等。具体功能说明可以查看文档。

_

然后可以通过圆形组件,矩形组件以及文字组件添加设备采买流程等,最后完成的效果如图。

我们可以预览,看看是否可以添加/删除设备。注意这里的添加/删除是会直接影响物联网平台上的设备的。

_

这样设备管理页就完成了,最后就是每个设备的详情页,也就是每个监控手环的信息展览页。

设备监控页

设备监控需要监控当前老人的心跳,剩余的电量,是否有告警信息,摄影设备的实时图像监控以及心跳的历史趋势图等。

仪表盘的配置

首先从左侧栏拖入一个仪表盘,修改一下样式。

_

然后关联设备数据,这里关联的是老人001的Wrist001设备的剩余电量。选择产品,设备,属性,然后验证数据格式。注意如果设备没有上报过信息,数据格式验证是无法通过的,可以通过虚拟设备上报信息进行验证。

_

这样就完成了剩余电量的仪表盘了,同理心跳数据的仪表盘也一样操作。

告警信息系统

我们需要一段文字来接受来自设备的告警信息,同时需要一个按钮调用告警服务。
首先拖入一段文字组件,然后关联对应设备的对应事件(如老人摔倒),验证格式之后文字会显示事件的快照值以及输出参数。当然可以通过服务开发工作台的HTTP请求接口修改文字内容,定制化等。

_

可以拖到最下方进行轮询,保证数据的实时性。

接下来是一个告警服务,比如短信通知家属,我们可以开通阿里云的短信服务或者钉钉机器人进行消息的输出,也可以用服务开发的“三方API”节点进行微信公众平台等三方输出。这里我们以钉钉机器人为例。

新建一个服务,使用一个HTTP请求节点,中间接一个钉钉机器人节点,最后接一个HTTP返回节点即可。HTTP请求不需要入参,HTTP返回不需要额外配置,钉钉机器人节点的配置项如下。

在按钮那里选择交互-点击-调用服务,选择对应的服务,验证即可看到钉钉机器人推送。

这就完成了告警模块的设置。

实况监控

图片的实况监控,如之前说的我们获取了设备图片的url作为属性上报,我们可以使用“变量”机制,帮助iframe组件获取设备上报的属性。

首先拖入一个iframe组件,然后直接把之前步骤里获得的oss图片链接粘贴上去即可。

iframe

心跳曲线

心跳曲线需要用到设备曲线图组件,可以直接关联具体的设备获取数据,无需额外的配置。

首先拖入一个曲线图组件,在数据源侧选择设备Wrist001,点击验证数据,即可读取最近上报的数据。

_

然后调节样式即可,最后样式如下:

这样就完成了整个设备监控页。其他页面按此流程绑定不同设备即可,目前组件也已经支持跨页面复制。

发布应用

我们需要先在阿里云上申请一个域名,打开域名购买,购买一个域名。

然后前往IoT Studio的Web可视化工作台的设置菜单,点击域名管理。按照引导流程处理进行域名解析。

然后点击右上角的发布,点击确定即可。

然后就可以看到发布成功了。直接前往自己购买的域名查看即可。

 

这样就完成一套全链路的阿尔茨海默病人护理物联网解决方案的发布了。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

一个数据科学家需要哪些核心工具包?

作者 | Rebecca Vickery译者 | 天道酬勤 责编 | 徐威龙封图| CSDN 下载于视觉中国数据科学家的主要作用是将机器学习、统计方法和探索性分析应用到数据中&#xff0c;来提取见解并帮助制定决策。 编程和计算工具的使用对该角色来说必不可少。 实际上&#xff0c;许多人都用这句…

Java-静态方法、非静态方法

// 学生类 public class Student {// 静态方法 staticpublic static void say01(){System.out.println("学生01 静态方法说话了");}// 非静态方法public void say02(){System.out.println("学生02 非静态方法说话了");} }静态方法、非静态方法 public cla…

SpringBoot2.x Flowable 6.4.2 开源项目

文章目录一、项目服务端初始化1. 创建数据库2. 初始化表结构.3. 表结构补充4. 配置文件修改5. 下载依赖6. 异常解决7. 启动服务端二、前端初始化2.1. 安装Node(V12.x.x以上)和NPM(V6.x.x以上)2.2. 安装淘宝镜像2.2. 初始化前端项目2.3. 启动项目2.4. web登录页面2.5. 效果图三、…

MongoDB 4.2 新特性解读

云数据库 MongoDB 版 基于飞天分布式系统和高性能存储&#xff0c;提供三节点副本集的高可用架构&#xff0c;容灾切换&#xff0c;故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。 了解更多 MongoDB World 2019 上发布新版本 MongoDB 4.2…

Java-类与对象的创建

// 学生类 public class Student {// 属性String name; // 默认 nullint age; // 默认 0// 方法public void study(){System.out.println(this.name " 在学习");} }public class Application {public static void main(String[] args) {// 实例化后会返回一个自己…

Spark3.0发布了,代码拉过来,打个包,跑起来!| 附源码编译

作者 | 敏叔V587责编 | 徐威龙封图| CSDN 下载于视觉中国Spark3.0已经发布有一阵子了&#xff0c;官方发布了预览版&#xff0c;带来了一大波更新&#xff0c;对于我们程序员来说&#xff0c;首先当然是代码拉过来&#xff0c;打个包&#xff0c;跑起来&#xff01;&#xff01…

MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?

今天&#xff0c;探讨一个有趣的话题&#xff1a;MySQL 单表数据达到多少时才需要考虑分库分表&#xff1f;有人说 2000 万行&#xff0c;也有人说 500 万行。那么&#xff0c;你觉得这个数值多少才合适呢&#xff1f; 曾经在中国互联网技术圈广为流传着这么一个说法&#xff1…

Java-构造器

一个类即使什么都不写&#xff0c;它也会存在一个方法 package oop.demo02;/*** author blake.wang* date 2021-04-19 18:58*/ public class Person {// 一个类即使什么都不写&#xff0c;它也会存在一个方法&#xff0c;具体可以看一个空 类 的编译后的class文件// 显示的定…

IntelliJ IDEA 2020 基础设置

文章目录1. 字体设置2. 编码设置3. jdk设置4. 自动引入包和删除无用引入的包5. 打开文件左右联动定位1. 字体设置 菜单字体 编辑区 控制台 收缩自如 2. 编码设置 3. jdk设置 4. 自动引入包和删除无用引入的包 5. 打开文件左右联动定位

跟面试官侃半小时MySQL事务隔离性,从基本概念深入到实现

来源 | 阿丸笔记提到MySQL的事务&#xff0c;我相信对MySQL有了解的同学都能聊上几句&#xff0c;无论是面试求职&#xff0c;还是日常开发&#xff0c;MySQL的事务都跟我们息息相关。而事务的ACID&#xff08;即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性D…

Java-封装

// 类 public class Student {// 属性私有private String name; // 名字private int id; // 学号private char sex; // 性别private int age; // 年龄// 提供一些可以操作这个属性的方法// 提供一些 public 的 get \ set 方法// get 获得这个数据public String getName(){r…

一条数据的漫游奇遇记

数据库存储引擎是一个有历史的技术&#xff0c;经过数十年的发展&#xff0c;已经出现很多优秀成熟的产品。阿里巴巴 X-Engine 团队撰写的论文 "X-Engine: An Optimized Storage Engine for Large-scale E-Commerce Transaction Processing"&#xff0c;详细讲述了团…

idea 编辑区设置

文章目录1. 显示行号2. tabs位置3. tabs排序4.tabs数量5.1. 显示行号 2. tabs位置 3. tabs排序 鼠标按住上下拖拽 按字母排序 4.tabs数量 5.

支付宝玉伯:从前端到体验,如何把格局做大

国内的前端行业&#xff0c;是一个群星璀璨&#xff0c;同时又有些纷纷扰扰的圈子。很多初出茅庐的年轻人怀着改变世界的梦想&#xff0c;谁也不服谁。不过&#xff0c;有一些为前端领域做出贡献的拓荒者几乎受到所有人的尊敬&#xff0c;玉伯就是这些拓荒者中的一员。 如今&am…

Java-继承

一个父类可以有多个子类&#xff0c;但是一个子类只能有一个父类 Person // 在java中&#xff0c;所有的类&#xff0c;都直接或者间接继承Object类 // person 人 父类 public class Person {// public > protected > default > private// public// protected --…

2019报告:AI程序员人才需求暴涨35倍!每10个公司就有6个人才缺口

就在最近&#xff0c;斯坦福大学AI研究所发布了《 2019 年 AI 指数报告》&#xff0c;其中一条数字让笔者震惊&#xff1a;58&#xff05; 的受访大公司表示&#xff0c;2019 年至少在一个业务部门采用了 AI那就是说&#xff0c;近半数以上的公司都需要AI人才&#xff01;但是现…

高效代码编辑功能

文章目录1. 行内跳转和选中2. 文件快速切换3. 查看最近查看过的文件4. 打开文件所在文件夹5.导航栏文件切换6. 查找和替换1. 行内跳转和选中 home跳转当前行首 end跳转当前行尾 按住ctrl左右快速按照单词跳转 按住ctrlshrift左右快速选中 2. 文件快速切换 alt左右 3. 查看最…

AnalyticDB for PG 如何作为数据源对接帆软 FineBI

AnalyticDB for PostgreSQL 基于开源数据库 Greenplum 构建&#xff0c;兼容Greenplum 和 PostgreSQL 的语法&#xff0c;接口和生态。本章节介绍如何通过FineBI连接 分析型数据库PostgreSQL版 并进行报表开发。 准备工作 开始使用FineBI之前&#xff0c;用户需要先完成以下准…

推出超低功耗数字式热释电传感器,翠展微电子厉害了……

近日&#xff0c;翠展微电子宣布推出了一款针对人体被动红外&#xff08;PIR&#xff09;应用的超低功耗数字芯片M1601。 据了解该方案通过热释电红外传感器以非接触方式检测出人体辐射的信号&#xff0c;并将该信号转换成电信号输入到芯片中进行信号处理。芯片的工作电流极低…

云上的Growth hacking之路,打造产品的增长引擎

增长关乎产品的存亡 增长&#xff01;增长&#xff01;增长&#xff01;业务增长是每一个创业者每天面临的最大问题。无论你的产品是APP&#xff0c;还是web&#xff0c;或者是小程序&#xff0c;只能不断的维持用户的增长&#xff0c;才能向资本市场讲出一个好故事&#xff0…