什么是php网站开发美橙互联网站备案

pingmian/2025/10/11 9:52:03/文章来源:
什么是php网站开发,美橙互联网站备案,2345网址导航怎么卸载win10,查询网站收录背景 常见的企业级无线接入方案有两种#xff0c;分别被称作廋AP和胖AP。瘦AP#xff08;ACAP#xff09;架构为比较传统的企业级无线接入方案#xff0c;主要优点就是漫游体验好#xff0c;但是AC宕机的话会导致所属的AP全部无法工作。对于大型的办公场所#xff0c;漫…背景 常见的企业级无线接入方案有两种分别被称作廋AP和胖AP。瘦APACAP架构为比较传统的企业级无线接入方案主要优点就是漫游体验好但是AC宕机的话会导致所属的AP全部无法工作。对于大型的办公场所漫游的需求相对较弱新型的胖AP无AC不会因为AC宕机导致网络不可用 云端控制器架构成为了新兴的一种企业无线接入方案运维人员通过云端对AP进行监控与管理。 某公司拥有无线AP约10,000台、接入终端STA100,000个。设备以一定的周期上报其状态到云端云端将监控数据持久化后供用户查看。 业务描述 每个AP设备会以10s的周期上报其当前状态上报数据格式为json其格式如下 AP状态 {ap_mac: 11:22:33:86:D9:E8, // AP WAN口MAC地址AP设备唯一标识report_time: 1532315501985, // 上报时间戳毫秒on_time: 1531417181972, // 设备上线时间戳毫秒sta_cnt: 2,   // 终端数量cpu_usage: 12, // CPU使用率memory_usage: 38, // CPU使用率wan_recv_speed: 280, // WAN口下行速率 单位bpswan_sent_speed: 45348, // WAN口上行速率 单位bps }需求以及架构选型 需求 通过MAC地址查看每个AP最新的状态。用户需要在管理系统上对基于各种条件对设备进行查询。需要对AP的各种指标进行排序以便找出故障设备。 我们将上述的需求分为两种多维查询。排序。 基于这两大类需求我们给出如下的架构选型比较。 架构选型 针对这种IOT场景的设备状态监控数据下面针对几种常见方案做比较。 MySQL 将设备上报的状态数据直接写入MySQL并使用MySQL自带的查询、排序语句对数据进行分析这种架构最为简单用户运维成本较低。 这种架构仅仅适用于小规模量的数据在大规模数据的情况下MySQL的内部架构也导致了无法创建出一种万用的索引来满足多维查询的需求。并且MySQL底层使用的是B数作为存储结构会有随机写的问题写入性能较差。 MySQL在使用前必须指定表结构也就是说后续新增需求的话必须要修改表结构在数据量较大的情况下修改表结构很容易造成锁表导致线上故障。 MySQL 自建Elasticsearch 由于MySQL的检索能力较弱MySQL Elasticsearch也是业界比较常见的方案。用户将数据写入MySQL并使用binlog订阅工具如canal将数据异步写入Elasticsearch架构如下图所示 其中Canal Client需要用户自己编写与部署。相比单MySQL的架构该方案很好地解决了MySQL在多维查询和指定列排序能力弱的问题。但是带了的问题也比较多 Canal与Elasticsearch需要用户自己部署带来的运维成本也相对提升。Canal Client侧负责读取Canal传输过来MySQL增量改变数据数据的一致性是需要用户自己保证的。 使用表格存储的SearchIndex功能 表格存储底层存储使用的LSM模型很好地解决了MySQL写入性能差的问题特别适合IOT这种写多读少的场景。 用户将数据写入表格存储后系统内部会将数据异步同步到SearchIndex数据写入TableStore到数据可查约有毫秒到秒级别的延迟用户无需关注运维相关的问题数据一致性也有系统内部保证做到了开箱即用。 结论 基于上面的比较表格存储更适合存储AP的状态数据并且通过SearchIndex可以很容易地完成多维查询以及排序。简明的系统整体架构如下图所示 表结构设计 表格存储底层使用主键的第一列将数据均分到对应的分区上以达到负载均衡的目的。我们知道MAC地址的前3个字节为厂商码也就是说如果同一个厂家生产出来的设备MAC地址前3个字节大多会是相同的如果直接使用MAC地址做主键的话可能会导致数据热点所以我们推荐对MAC地址做MD5之后做第一列主键。关于表结构设计的最佳实践详见这里。 最新状态数据 AP状态 表名:wifi_ap_status 列类型列名类型示例备注主键列pk0String1b5de627b4a25553baf1f72af9afb96dMD5(ap_mac)对ap_mac做MD5值列ap_macString11:22:33:44:55:66AP MAC地址 report_timeInteger​1537363646533UTC时间戳毫秒 on_timeI​nteger1537363646533同上 sta_cntI​nteger10所连接终端数 cpu_usageI​nteger20CPU使用率 memory_usageI​nteger50内存使用率 wan_recv_speedI​nteger817收数据速率单位bps wan_sent_speedI​nteger2411发数据速率单位bps 代码示例 下面将以AP状态作为例子给出全流程的代码示例。 初始化 创建TableStore client SyncClient syncClient new SyncClient($endpoint,$accessKeyId,$accessKeySecret,$instanceName); SyncClient对象为线程安全如果使用Spring的话可以将其作为一个单例Bean注入到其他对象中使用 创建TableStore表 表的创建可以在控制台上完成也可以通过SDK完成如果使用SDK的话代码示例如下 创建AP状态表 // 指定表名 TableMeta tableMeta new TableMeta(wifi_ap_status); // 指定主键列根据上面的表结构设计这边只有pk0一个主键列 tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(pk0, PrimaryKeyType.STRING)); CreateTableRequest createTableRequest new CreateTableRequest(tableMeta, new TableOptions(-1, 1)); syncClient.createTable(createTableRequest); 创建SearchIndex 与创建表相同SearchIndex的创建可以通过控制台完成如果使用SDK的话示例如下 创建AP状态SearchIndex CreateSearchIndexRequest createSearchIndexRequest new CreateSearchIndexRequest(); createSearchIndexRequest.setIndexName(wifi_ap_status); createSearchIndexRequest.setTableName(wifi_ap_status); IndexSchema indexSchema new IndexSchema(); indexSchema.setIndexSetting(new IndexSetting(5)); indexSchema.setFieldSchemas(Arrays.asList(new FieldSchema(ap_mac, FieldType.TEXT).setIndex(true), // 可搜索new FieldSchema(report_time, FieldType.LONG).setIndex(true).setEnableSortAndAgg(true), // 可搜索并可排序new FieldSchema(sta_cnt, FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),new FieldSchema(cpu_usage, FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),new FieldSchema(memory_usage, FieldType.LONG).setIndex(true).setEnableSortAndAgg(true) )); createSearchIndexRequest.setIndexSchema(indexSchema); CreateSearchIndexResponse resp syncClient.createSearchIndex(createSearchIndexRequest); 数据写入 用户只需使用原表格存储的写入功能将数据写入即可表格存储内部会自动将数据导入SearchIndex无需关心内部实现。 PutRowRequest putRowRequest new PutRowRequest(); RowPutChange rowPutChange new RowPutChange(wifi_ap_status);String apMac 11:22:33:86:D9:E8; // 通过AP MAC计算MD5防止产生数据热点这边使用了apache的commons-codec库 String pk0 DigestUtils.md5Hex(apMac); PrimaryKey pk new PrimaryKey(new PrimaryKeyColumn[]{new PrimaryKeyColumn(pk0, PrimaryKeyValue.fromString(pk0)) });rowPutChange.setPrimaryKey(pk); rowPutChange.addColumns(new Column[]{new Column(ap_mac, ColumnValue.fromString(apMac)),new Column(report_time, ColumnValue.fromLong(System.currentTimeMillis())),new Column(on_time, ColumnValue.fromLong(System.currentTimeMillis())),new Column(cpu_usage, ColumnValue.fromLong(56)),new Column(sta_cnt, ColumnValue.fromLong(4)),new Column(memory_usage, ColumnValue.fromLong(43)),new Column(wan_recv_speed, ColumnValue.fromLong(280)),new Column(wan_sent_speed, ColumnValue.fromLong(45348)), });putRowRequest.setRowChange(rowPutChange);syncClient.putRow(putRowRequest); 数据读取 数据读取分为两种 1.基于原生的表格存储的主键获取 2.基于SearchIndex功能获取 下面对于这两种不通模式的读取分别举例说明 通过主键读取 通过主键获取AP状态的话是直接从表格存储的表中直接获取的。也就是说在通过主键获取数据的时候是不需要通过SearchIndex功能的代码示例如下 GetRowRequest getRowRequest new GetRowRequest(); String apMac 11:22:33:86:D9:E8; // 通过AP MAC计算MD5防止产生数据热点这边使用了apache的commons-codec库 String pk0 DigestUtils.md5Hex(apMac); // 设置主键 PrimaryKey pk new PrimaryKey(new PrimaryKeyColumn[]{new PrimaryKeyColumn(pk0, PrimaryKeyValue.fromString(pk0)) });SingleRowQueryCriteria singleRowQueryCriteria new SingleRowQueryCriteria(wifi_ap_status, pk); singleRowQueryCriteria.setMaxVersions(1); getRowRequest.setRowQueryCriteria(singleRowQueryCriteria);GetRowResponse rowResponse syncClient.getRow(getRowRequest); Row row rowResponse.getRow(); // 获取主键列 PrimaryKey primaryKey row.getPrimaryKey(); for (PrimaryKeyColumn primaryKeyColumn : primaryKey.getPrimaryKeyColumns()) {System.out.println(PrimaryKeyColumn:( primaryKeyColumn.getName() : primaryKeyColumn.getValue() )); } // 获取值列 for (Column column : row.getColumns()) {System.out.println(Column:( column.getName() : column.getValue() )); } 通过SearchIndex功能读取 为了方便描述下面通过SQL仅为表示具体需求SearchIndex暂不支持SQL语句代码的形式给出示例来描述我们的场景。 多维查询 如果需要通过非主键列进行多维查询我们可以使用syncClient的search方法在上面的例子中我们为wifi_ap_status表创建了SearchIndex并且指定了索引列。 如果要实现下面的SQL SELECT * FROM wifi_ap_status WHERE ap_mac LIKE %86:D9:E8% AND sta_cnt 2 用java语言实现的话代码如下 SearchQuery searchQuery new SearchQuery(); // 使用BoolQuery来实现组合条件查询本例搜索了ap_mac包含86:D9:E8并且sta_cnt大于等于2的数据 BoolQuery query new BoolQuery(); // 使用短语搜索模糊匹配ap_mac MatchPhraseQuery macQuery new MatchPhraseQuery(); macQuery.setFieldName(ap_mac); macQuery.setText(86:D9:E8); // 使用范围查询sta_cnt RangeQuery staCntQuery new RangeQuery(); staCntQuery.setFieldName(sta_cnt); staCntQuery.setFrom(ColumnValue.fromLong(2), true); query.setMustQueries(Arrays.asList(macQuery,staCntQuery )); searchQuery.setQuery(query);// 构建搜索请求 SearchRequest searchRequest new SearchRequest(wifi_ap_status, // 表格存储表名wifi_ap_status, // SearchIndex索引名searchQuery ); // 设置需要返回的表列 SearchRequest.ColumnsToGet columnsToGet new SearchRequest.ColumnsToGet(); // 设置返回所有列 columnsToGet.setReturnAll(true); searchRequest.setColumnsToGet(columnsToGet);// 搜索请求 SearchResponse searchResponse syncClient.search(searchRequest); ListRow rows searchResponse.getRows();for (Row row : rows) {PrimaryKey primaryKey row.getPrimaryKey();for (PrimaryKeyColumn primaryKeyColumn : primaryKey.getPrimaryKeyColumns()) {System.out.println(PrimaryKeyColumn:( primaryKeyColumn.getName() : primaryKeyColumn.getValue() ));}for (Column column : row.getColumns()) {System.out.println(Column:( column.getName() : column.getValue() ));} } 排序 排序功能也是我们的常见需求比如我们需要查看在某个条件下挂载终端数最多的几个AP如果用SQL语句描述的话如下 SELECT * FROM wifi_ap_status WHERE ap_mac LIKE %11:22:33% ORDER BY sta_cnt DESC 如果用代码表示的话如下 SearchQuery searchQuery new SearchQuery(); // 使用短语搜索模糊匹配ap_mac MatchPhraseQuery macQuery new MatchPhraseQuery(); macQuery.setFieldName(ap_mac); macQuery.setText(11:22:33); searchQuery.setQuery(macQuery);// 排序选项sta_cnt降序 FieldSort staCntSorter new FieldSort(sta_cnt); staCntSorter.setOrder(SortOrder.DESC);searchQuery.setSort(new Sort(Collections.singletonList(staCntSorter )));// 构建搜索请求 SearchRequest searchRequest new SearchRequest(wifi_ap_status,wifi_ap_status,searchQuery ); // 设置需要返回的表列 SearchRequest.ColumnsToGet columnsToGet new SearchRequest.ColumnsToGet(); // 设置返回所有列 columnsToGet.setReturnAll(true); searchRequest.setColumnsToGet(columnsToGet);// 搜索请求 SearchResponse searchResponse syncClient.search(searchRequest); ListRow rows searchResponse.getRows(); 原文链接 本文为云栖社区原创内容未经允许不得转载。

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

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

相关文章

网站服务器到期查询怎么做游戏网站编辑

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

购物网站最近浏览怎么做门户网站建设哪专业

参考链接: Python中的range()和xrange() 在python2 中 range(start,end,step)返回一个列表,返回的结果是可迭代对象,但不是迭代器。iter()转化为列表迭代器。xrange()返回的是一个序列,他也是可迭代对象,但不是迭代…

山东企业网站建设费用企业建设网站的功能是什么

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

西宁市住房和城乡建设局网站怎样建立平台

Vue 和 jQuery 是两种不同类型的前端工具,它们有一些显著的区别: Vue 响应式数据绑定:Vue 提供了双向数据绑定和响应式更新的能力,使得数据与视图之间的关系更加直观和易于维护。组件化开发:Vue 鼓励使用组件化的方式…

做速卖通的素材有哪些网站51电子网

2024年的壁炉趋势是环保的、现代的和100%安全的,作为装饰性壁炉已经比取暖的壁炉更加受欢迎。现今,作为装饰性观赏的壁炉与为了加热取暖而开发的燃木壁炉、燃气壁炉之间存在明显区别。尽管加热取暖的壁炉在农村很有意义,但是装饰性壁炉在城市…

自学做视频网站网站建设课程性质

00. 目录 文章目录 00. 目录01. DMA简介02. DMA主要特性03. 存储器映像04. DMA框图05. DMA基本结构06. DMA请求07. 数据宽度与对齐08. 数据转运DMA09. ADC扫描模式DMA10. 附录 01. DMA简介 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F…

衡阳网站制作公司漯河城乡建设管理局网站

根据第 19 届 KDnuggets调查显示,Python 成数据分析、数据科学与机器学习的第一大语言。图片来源于第 19 届 KDnuggets软件大调查Python 在机器学习中的地位日益扩大,2017 年,机器学习中Python 的使用率超过 50%,今年则直接上升到…

淮安集团网站建设购物网站每个模块主要功能

目录 认识回溯思想回溯的代码框架从 N 叉树说起有的问题暴力搜索也不行回溯 递归 局部枚举 放下前任Go代码【LeetCode-77. 组合】回溯热身-再论二叉树的路径问题题目:二叉树的所有路径Go 代码 题目:路径总和 IIGo 代码 回溯是最重要的算法思想之一&am…

怎样打开网站制作盲盒小程序加盟

假如一堆数据&#xff0c;每一个数据都有一个标志位&#xff0c;按照标志位值的不同进行划分为不同的组&#xff0c;进行归类。 代码如下&#xff1a; void chunzhongForm::traverseList(winProList &dataList) {int nSize dataList.size();for(int i 0; i < nSize; …

文安做网站的做网站开发有什么专业证

一、背景 初学html&#xff0c;接触很多标签 <h1>、<p>、<span>、<ul>、<em>等&#xff0c;当写出简单的小页面的时候&#xff0c;例如仅仅是一篇带有标题的文章&#xff0c;标题 <h1>标签单独一行&#xff0c;不管后面有多大的空间&…

关于网站建设需要的研究方法网站建设颜色代码表

引自《 JavaScript 权威指南》2.4 / P28 ~ 29 保留字 部分 保留字 JavaScript 把一些标识符拿出来用作自己的关键字。因此&#xff0c;就不能再在程序中把这些关键字用作标识符了&#xff1a; 保留字 Part1.txt123456breakdelete functionreturntypeofcasedoifswitchvarc…

新手织梦网建设网站广州网站建设联系信科海珠

介绍 本文将探讨生成对抗网络(GAN)及其时尚图像生成的卓越能力。GAN 彻底改变了生成建模领域,提供了一种通过对抗性学习创建新内容的创新方法。 在本指南中,我们将带您踏上一段迷人的旅程,从 GAN 的基本概念开始,逐步深入研究时尚图像生成的复杂性。通过实践项目和分步…

做微网站的第三方登录高端网站源码

在上一期&#xff0c;小编带大家盘点了年度炫云云渲染使用相关常见咨询问题TOP20。这份榜单不仅是对过去一年用户关注焦点的回顾&#xff0c;更是一个汇总了各类问题解答的宝典。无论您是初次使用还是老用户&#xff0c;都能帮助您更快速地解决疑问&#xff0c;提升使用炫云各类…

做网站用什么空间网站项目建设合同

Sqli-labs-Less-9 前言&#xff1a; SQL注入的三个条件&#xff1a; ①参数可控&#xff1b;&#xff08;从参数输入就知道参数可控&#xff09; ②参数过滤不彻底导致恶意代码被执行&#xff1b;&#xff08;需要在测试过程中判断&#xff09; ③参数带入数据库执行。&#…

网站开发学什么语音北京logo设计制作

来源&#xff1a;《科学进展》概要&#xff1a;一种以神经元为模型的超导计算芯片&#xff0c;能比人脑更高效快速地加工处理信息。一种以神经元为模型的超导计算芯片&#xff0c;能比人脑更高效快速地加工处理信息。近日刊登于《科学进展》的新成果&#xff0c;或许将成为科学…

有哪些做投行网站做网站一年的维护费用是多少

随着数字媒体的发展&#xff0c;越来越多的人开始需要处理带有水印的图片或视频。水印不仅是一种版权保护手段&#xff0c;也常常被用来标记图片或视频的来源。然而&#xff0c;在某些情况下&#xff0c;我们可能需要去除水印以实现更好的使用效果。那么&#xff0c;去水印软件…

襄阳论坛网站建设公司网站怎么做才能有官网二字

目录 前言static 作用在变量上static 作用在全局变量上static 作用在局部变量上static 作用在成员变量上 static 作用在函数上static 作用在函数上static 作用在成员函数上 前言 在 C/C 中&#xff0c;关键字 static 在不同的应用场景下&#xff0c;有不同的作用&#xff0c;这…

临沂网站建设网站推广茂名专业做网站公司

Azure 中的云原生开发工具 Azure 包含一系列用于云原生应用程序开发的内置工具和服务。这里介绍的服务和工具是很好的入门选择。 发展 Azure 包括两个用于开发和构建云原生应用程序的主要工具&#xff1a;Visual Studio (VS) 和Azure应用服务。 VS 是一个集成开发环境&#…

有没有专门做纸箱的网站网站域名注册空间

前言 这几天看到很多小伙伴都在安装虚拟机&#xff0c;但成不成就不知道了。 所以小白准备把自己安装完成的系统打包分享给小伙伴。 如果你需要已经安装完成的虚拟系统&#xff0c;可以获取哦&#xff01;打开即用&#xff01; 虚拟机系统包括&#xff1a; Win10 专业版 Wi…

广州越秀网站制作博达高校网站群建设教程

1、super() 是一个Python内置函数&#xff0c;用于调用父类的方法。通过调用super()返回的对象的方法&#xff0c;可以在子类中访问父类的属性和方法&#xff0c;并在需要的情况下进行扩展或修改。 super()函数的一般语法是super().method()&#xff0c;其中method是父类中的…