当前位置: 首页 > news >正文

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据

在这里插入图片描述

文章目录

  • 【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据
    • 前言
    • 出现的背景
    • 一、TDSQL-C数据库是什么?
    • 二、TDSQL-C 的特点
    • 三、TDSQL-C的应用场景
    • 四、基于TDSQL-C 存储爬取的QQ音乐歌单数据
      • 1、创建TDSQL-C Serverless数据库
      • 2、创建所需数据库并通过DMC进行数据库管理
      • 3、构建QQ音乐歌单爬虫
        • 3.1 初始化框架环境
        • 3.2 在spiders下创建分类爬虫
        • 3.3 在spiders下创建歌单爬虫
      • 4、进行数据库状态观察
    • 总结
    • 参考文献

前言

最近有幸参与了腾讯云举办的 腾讯云 TDSQL-C 产品体验活动。在这个过程中,通过了解 TDSQL-C 的产品和实践,让我受益非浅,原来数据库还能这么玩! 也让我真正体会到了降本增效这个词的意义。

在看到活动的介绍和微信群的讲解后,我马不停蹄地开始了自己摸索。首先是跟着群里小助手发的实验手册,体验了一下整个产品的业务流程。

随后又查看官方的产品文档,文档非常的简洁明了,然后根据这些资料开始了我的第一个 TDSQL-C 程序,基于 TDSQL-C 数据库构建了一个基于 Vue 的问卷调查系统,亲身体验了 TDSQL-C 带来的高性能、弹性可靠服务,整个过程十分丝滑。

下面就来整理,分享一下我的操作和感悟,希望能够帮助到其他同学。

出现的背景

传统数据库为什么被云数据库替代?

关于 TDSQL-C 的出现,我觉得需要先从云数据库开始了解,传统的本地数据库部署需要企业自己购买、维护硬件设备和管理数据库软件,这对于资源有限的中小企业来说可能是一项昂贵和繁琐的任务。同时,传统数据库在面对大规模的数据处理和高并发访问时可能会遇到性能瓶颈和可用性问题。云数据库的出现解决了这些问题。它将数据库部署在云平台上,并提供弹性的计算和存储资源,使用户能够根据实际需求按需扩展数据库的容量和性能。云数据库还提供高可用性和可靠性,通过数据备份、冗余存储和容灾机制来保护数据的安全和可恢复性。此外,云数据库还提供了便捷的管理和监控工具,简化了数据库的操作和维护过程。

serverless数据库带来了什么好处?

而云 Serverless 数据库的出现则是为了进一步提供更高的灵活性和经济效益。传统的数据库需要预先配置和维护一定数量的计算资源,而这些资源在闲置时仍然需要付费。而 Serverless 数据库采用按需付费的模式,它根据实际的计算和存储资源使用量来计费,无需预先配置资源。这使得用户可以根据实际需求动态地扩展和缩减数据库的资源,避免了资源浪费和额外的成本支出。Serverless 数据库还可以自动管理和优化资源,用户只需专注于应用开发,而无需关注底层基础设施的管理。

TDSQL-C 是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,100%兼容 MySQL,为用户提供极致弹性、高性能、高可用、高可靠、安全的数据库服务。实现超百万 QPS 的高吞吐、PB 级海量分布式智能存储、Serverless 秒级伸缩,助力企业加速完成数字化转型。

Serverless 服务是腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库。Serverless 服务支持按实际计算和存储资源使用量收取费用,不用不付费,将腾讯云云原生技术普惠用户。

总的来说,云数据库云 Serverless 数据库的产生是为了满足不同规模和需求的用户对于数据存储和处理的需求,并提供更灵活、可扩展和经济高效的解决方案。

一、TDSQL-C数据库是什么?

TDSQL-C MySQL 版基于 Cloud Native 设计理念,既融合了商业数据库稳定可靠、高性能、可扩展的特征,又具有开源云数据库简单开放、高效迭代的优势。

我们来理解一下这段描述, Cloud Native 设计理念是什么?

Cloud Native 设计理念是一种在云计算环境下进行应用开发和部署的方法论和思维方式,目标是将应用程序和基础设施解耦,使得应用程序能够更好地适应云环境的动态性和弹性,并提供更好的可伸缩性、可靠性和可管理性。它能够帮助开发者更快速、高效地构建和交付应用程序,并更好地应对日益复杂和变化的业务需求。

基于这个设计方式,所以 TDSQL-C MySQL 版可以为为用户提供具备超高弹性、高性能、海量存储、安全可靠的数据库服务,以可帮助企业轻松应对诸如商品订单等高频交易、伴随流量洪峰的快速增长业务、游戏业务、历史订单等大数据量低频查询、金融数据安全相关、开发测试、成本敏感等的业务场景。

二、TDSQL-C 的特点

我找到了一些关于我们在选择底层组件时候需要关注的一些特点,凭什么 TDSQL-C 值得我们选择呢?

  1. 完全兼容

TDSQL-C MySQL 版将开源数据库的计算和存储分离,存储构建在腾讯云分布式云存储服务之上,计算层全面兼容开源数据库引擎 MySQL 5.7、8.0,业务无需改造即可平滑迁移。

  1. 超高性能

单节点百万 QPS 的超高性能,可以满足高并发高性能的场景,保证关键业务的连续性,并可进一步提供读写分离以及读写扩展性。

  1. 海量存储

最高支持 PB 级的海量存储,为用户免去面对海量的数据时频繁分库分表的繁琐操作,同时支持数据压缩,在海量数据检索和写入性能上进行了大量优化。

  1. 秒级故障恢复

计算节点实现了无状态,支持秒级的故障切换和恢复,即便计算节点所在的物理机宕机也可以在一分钟之内恢复。

  1. 数据高可靠

集群支持安全组和 VPC 网络隔离。自动维护数据和备份的多个副本,保障数据安全可靠,可靠性达99.9999999%。

  1. 弹性扩展

计算节点可根据业务需要快速升降配,秒级完成扩容,结合弹性存储,实现计算资源的成本最优。

  1. 快速只读扩展

计算节点可根据业务需要快速添加只读节点,一个集群支持秒级添加或删除1个 - 15个只读节点,快速应对业务峰值和变化场景。

  1. 快照备份回档

基于数据多版本的秒级快照备份对用户的数据进行连续备份保护,免去主从架构备份回档数据的同步和搬迁,最高以GB/秒的速度极速并行回档,保证业务数据迅速恢复。

  1. Serverless 架构

Serverless 是腾讯自研云原生数据库 TDSQL-C MySQL 版的无服务器架构版,自动扩缩容,仅按照实际使用量计费,不用不计费,轻松应对业务数据量动态变化和持续增长。

三、TDSQL-C的应用场景

TDSQL-C MySQL版广泛适用于多个行业和应用场景,具备以下条件和优势:

  1. 互联网移动应用:

    • 提供商用数据库级别的高性能和高可靠性,保证业务的平稳高效运行。
    • 解决了传统主备架构在弹性能力、同步效率和主备切换时间等方面的问题,保证系统的高可用性和业务的连续性。
    • 全面兼容开源数据库MySQL,无需更改现有业务应用即可接入TDSQL-C MySQL版,助力企业平滑上云。
  2. 游戏应用:

    • 提供敏捷灵活的弹性扩展,根据业务需求快速升降级和扩容,应对业务峰值。
    • 支持PB级的海量存储,按存储量计费,自动扩容,减少了合区合服的繁琐操作,实现资源和成本的最优配置。
    • 提供秒级的快照备份和快速回档能力,对用户数据进行连续保护。
  3. 电商、直播、教育行业:

    • 支持秒级的升配,最多可扩展至15个节点,快速增加QPS的能力,解决了传统数据库升配时间随存储量和宿主机资源增加而上升的问题。
    • 提供优化的IOPS能力,保证在高并发状态下的出色数据写入能力,适应业务峰值需求。
    • 通过物理复制方式连接读写节点和只读节点,大大降低了只读节点与读写节点之间的延迟,满足电商场景中买家和卖家数据的一致性读取需求。
  4. 金融、保险企业:

    • 采用多可用区架构,在多个可用区备份数据,提供容灾和备份功能。
    • 提供全方位的安全保障措施,如白名单VPC网络等,保护数据库数据的访问、存储和管理。
    • 通过共享分布式存储设计,彻底解决了主从异步复制带来的备库数据非强一致性问题。

这些条件和优势使TDSQL-C MySQL版适用于各种业务场景,包括高频交易、快速增长业务、大数据量低频查询、金融数据安全、开发测试和成本敏感场景。

四、基于TDSQL-C 存储爬取的QQ音乐歌单数据

我这次准备使用 TDSQL-C Serverless MySQL 快速搭建一个爬虫应用,这里我们打算使用 Python来实现,来体验 云原生数据库 TDSQL-C 给我们带来的优势。

如下为最项目代码如下:
在这里插入图片描述

让我们开始构建吧!!!

1、创建TDSQL-C Serverless数据库

在这里插入图片描述

一直下一步购买后就能在TDSQL-C集群列表中看见

在这里插入图片描述

  • 为了方便后续我们开发程序,我们需要先将数据库的外网访问打开

在这里插入图片描述

2、创建所需数据库并通过DMC进行数据库管理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 通过 DMC 创建数据表
CREATE TABLE `cate` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(255) DEFAULT NULL,`type` varchar(255) DEFAULT NULL COMMENT 'kg | kw | wyy | qq',`cate` varchar(255) DEFAULT NULL COMMENT '分类',`primary_key` bigint(255) DEFAULT NULL COMMENT '平台主键',`create_date` datetime DEFAULT NULL,`update_date` datetime DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `u` (`type`,`primary_key`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;CREATE TABLE `playlist` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(255) DEFAULT NULL COMMENT '标题',`desc` longtext COMMENT '描述',`cate` varchar(255) DEFAULT NULL COMMENT '类型',`cate_id` varchar(255) DEFAULT NULL,`is_own` tinyint(255) DEFAULT '1' COMMENT '1 第三方创建的  2自己创建的',`primary_key` varchar(255) DEFAULT NULL COMMENT '第三方歌单主键',`key_type` char(10) DEFAULT NULL COMMENT 'qq | kg | wyy | kw ',`thumb_img` longtext COMMENT '封面',`tag` text COMMENT '标签 ,',`tag_id` text COMMENT '标签id ,拆分',`author` varchar(255) DEFAULT NULL COMMENT '作者',`author_id` bigint(255) DEFAULT NULL COMMENT '作者id',`collect_num` bigint(20) DEFAULT '0' COMMENT '收藏数量',`share_num` bigint(20) DEFAULT '0' COMMENT '分享数量',`comment_num` bigint(255) DEFAULT '0' COMMENT '评论数量',`play_num` bigint(20) DEFAULT '0' COMMENT '歌单播放次数',`song_num` bigint(20) DEFAULT '0' COMMENT '歌单歌曲数量',`platform_create_date` datetime DEFAULT NULL COMMENT '第三方歌单创建时间',`create_date` datetime DEFAULT NULL,`update_date` datetime DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

在这里插入图片描述

一个是分类表,用于存储歌单的分类信息,然后通过分类去获取歌单列表
另一个是歌单表,用于存储爬取的歌单数据

3、构建QQ音乐歌单爬虫

3.1 初始化框架环境

这里我采用了 feapder 这个轻量级框架

  • 安装 feapder 爬虫框架
pip3 install feapder[all]
  • 创建爬虫项目
feapder create -p QQSpider
  • setting.py 中配置TDSQL-C数据库以及 redis 信息
# # MYSQL
MYSQL_IP = "gz-xxxxxx"
MYSQL_PORT = 28671
MYSQL_DB = "questionnaire"
MYSQL_USER_NAME = "root"
MYSQL_USER_PASS = "123456"# # REDIS
# # ip:port 多个可写为列表或者逗号隔开 如 ip1:port1,ip2:port2 或 ["ip1:port1", "ip2:port2"]
REDISDB_IP_PORTS = "x"
REDISDB_USER_PASS = "x"
REDISDB_DB = 7
  • 安装依赖 requirements.txt
feapder~=1.7.7
pycryptodome
Flask~=2.2.2
pillow~=9.2.0
requests-toolbelt
requests~=2.27.1
apscheduler~=3.9.1
js2py~=0.71
urllib3~=1.26.11
pytz~=2022.1
gevent~=21.12.0
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple

为了方便可以把这个 shell 写在项目的根目录

3.2 在spiders下创建分类爬虫

  • category.py
import feapder
import urllib.parsefrom feapder import Requestfrom items.cateItem import CateItemclass CategorySpider(feapder.Spider):commonParams = {'g_tk': 1124214810,'loginUin': '0','hostUin': 0,'inCharset': 'utf8','outCharset': 'utf-8','notice': 0,'platform': 'yqq.json','needNewCode': 0,}apiHeader = {'referer': 'https://c.y.qq.com/','host': 'c.y.qq.com'}domain = 'https://c.y.qq.com'def start_requests(self):url = "/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?" + self.getParams({'format': 'json','outCharset': 'utf-8',})yield self.request(url, method="GET")def request(self, path, **kwargs):req = Request(self.domain + path, **kwargs)return self.downloadMidware(req)def downloadMidware(self, request):if request.url.startswith('https://y.qq.com/n/ryqq/playlist'):return requestrequest.headers = self.apiHeaderreturn requestdef getParams(self, params):data = paramsdata.update(self.commonParams)return urllib.parse.urlencode(data)def validate(self, request, response):jsonData = response.jsonif jsonData['code'] != 0:raise Exception(jsonData['message'])return Truedef parse(self, request, response):jsonData = response.jsonfor cate in jsonData['data']['categories']:cateName = cate['categoryGroupName']for item in cate['items']:cateItem = CateItem()cateItem.primary_key = item['categoryId']cateItem.title = item['categoryName']cateItem.type = "qq"cateItem.cate = cateNameyield cateItemif __name__ == "__main__":CategorySpider(redis_key="qq_category:spider").start()

这里我们还要配置一下 ORM,在itmes目录下创建 cateItem,用于映射数据库表,方便直接入库,不用编写原生SQL

  • items/cateItem.py
from feapder import Item
from feapder.utils import toolsclass CateItem(Item):"""This class was generated by feapder.command: feapder create -i spider_data."""__unique_key__ = ["title", "cate", "type", 'primary_key']  # 指定去重的key为 title、url,最后的指纹为title与url值联合计算的md5def __init__(self, *args, **kwargs):# self.id = Nonesuper().__init__(**kwargs)self.table_name = "cate"self.title = Noneself.cate = Noneself.primary_key = Noneself.type = Noneself.create_date = Noneself.update_date = Nonedef pre_to_db(self):"""入库前的处理"""self.create_date = tools.format_time("刚刚")self.update_date = tools.format_time("刚刚")
  • 运行测试爬取分类数据

在这里插入图片描述
可以看到数据已经全部入库了
在这里插入图片描述

3.3 在spiders下创建歌单爬虫

同理,我们先建立一下歌单表的 ORM

  • items/playlistItem.py
from feapder import Item
from feapder.utils import toolsclass PlaylistItem(Item):def __init__(self, *args, **kwargs):# self.id = Nonesuper().__init__(**kwargs)self.table_name = "playlist"self.title = Noneself.desc = Noneself.primary_key = Noneself.cate = Noneself.cate_id = Noneself.key_type = Noneself.thumb_img = Noneself.tag = Noneself.tag_id = Noneself.author = Noneself.author_id = Noneself.collect_num = Noneself.share_num = Noneself.comment_num = Noneself.play_num = Noneself.song_num = Noneself.platform_create_date = Noneself.create_date = Noneself.update_date = Nonedef pre_to_db(self):"""入库前的处理"""self.create_date = tools.format_time("刚刚")self.update_date = tools.format_time("刚刚")

然后创建爬虫

  • spiders/playlist.py
import urllib.parseimport feapder
from feapder import Request
from feapder.db.mysqldb import MysqlDBfrom items.playlistItem import PlaylistItemclass PlayListSpider(feapder.Spider):commonParams = {'g_tk': 1124214810,'loginUin': '0','hostUin': 0,'inCharset': 'utf8','outCharset': 'utf-8','notice': 0,'platform': 'yqq.json','needNewCode': 0,}apiHeader = {'referer': 'https://c.y.qq.com/','host': 'c.y.qq.com'}domain = 'https://c.y.qq.com'def start_requests(self):db = MysqlDB()cateList = db.find(sql="select * from cate where type = 'qq'", to_json=True)for cate in cateList:yield self.getPlaylistByCateId(cate['primary_key'], cate['title'])def getPlaylistByCateId(self, cateId, cateTitle, page=0, limit=50, sortId=5):sin = +page * +limitein = +limit * (+page + 1) - 1params = self.getParams({'format': 'json','outCharset': 'utf-8','picmid': 1,'categoryId': cateId,'sortId': sortId,'sin': sin,'ein': ein,})url = "/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg?" + paramsreturn self.request(url, method="GET", page=page, limit=limit, cateId=cateId, cateTitle=cateTitle)def getParams(self, params):data = paramsdata.update(self.commonParams)return urllib.parse.urlencode(data)# 构造请求def request(self, path, **kwargs):req = Request(self.domain + path, **kwargs)return self.downloadMidware(req)# 构造请求头def downloadMidware(self, request):if request.url.startswith('https://y.qq.com/n/ryqq/playlist'):return requestrequest.headers = self.apiHeaderreturn requestdef validate(self, request, response):jsonData = response.jsonif jsonData['code'] != 0:raise Exception(jsonData['message'])return Truedef parse(self, request, response):jsonData = response.jsonplaylist = jsonData['data']['list']for item in playlist:playlist = PlaylistItem()playlist.title = item.get('dissname')playlist.thumb_img = item.get('imgurl')playlist.create_date = item.get('createtime')playlist.primary_key = item.get('dissid')playlist.desc = item.get('introduction')playlist.play_num = item.get('listennum')playlist.cate = request.cateTitleyield playlist# 分页处理if len(playlist) != 0:yield self.getPlaylistByCateId(request.cateId, request.cateTitle, request.page + 1, request.limit)# 通过分类id获取歌单列表if __name__ == "__main__":PlayListSpider(redis_key="qq_playlist:spider").start()

运行爬虫后可以看到数据库的吞吐率很高,一会就有几千条数据了

在这里插入图片描述

在这里插入图片描述

4、进行数据库状态观察

在爬取的过程中,我一直担心数据库会成为应用的瓶颈,没想到最低配的 TDSQL-C 性能也是异常的强悍,期间通过自带的监控告警,也是很方便观察到秒级性能波动

在这里插入图片描述
然后 TDSQL-C 旁边还有个 数据库智能管家,这是一个非常利于我们在线运维的工具,他可以看到当前实例的:异常、性能趋势、实时会话、慢SQL分析、SQL优化、审计日志等等

在这里插入图片描述
在这里插入图片描述
他还可以为我们根据时间区间创建健康报告,让我们清晰地了解到数据库实例的健康状态,针对重要项目,我们可以设置定期报告,然后通过邮箱接收报告内容,从而减轻我们的运维负担

在这里插入图片描述

总结

本次案例主要让大家对云原生数据库 TDSQL-C Serverless 有一个基本的认识,可以看到 TDSQL-C Serverless 与平时所使用的 Sql 语法差不多一致,基本上没有什么学习成本,开箱即用,可以快速上手,真正的无缝接入, 异常的丝滑!!

针对本次体验,我也总结了一些优点与遇到的一些问题,希望分享给大家,能给大家带来一些技术选型建议:

  • 其中优点有:
  1. 其中在 TDSQL-C 的特点中:高性能海量存储完全兼容Mysql快照备份等都能够非常直接感受到,确实如描述所说,属于名副其实了,这个我也不过多赘述。
  2. 通过对传统数据库的了解,实际上对于采用 ServerLess 架构的数据库,是对中小公司的更好选择,通过灵活的计费模式,按量付费不需要承担过多的人力成本、运维成本就可以获得一个高可用、高性能基础设施,从而实现降本增效
  3. TDSQL-C 还可以非常简单面对各种大流量场景,其中有一个非常简单易用的功能就输数据库的流量负载均衡,通过设置 RO 组只读实例的集合,然后通过权重进行流量负载均衡,相应的读请求按一定规则发送到只读实例,能够显著提高数据库的读负载能力。
  4. 在产品上比较完备,感觉很细节,在提供数据库的同时也提供了数据库的可视化管理,不用再去下载数据库管理客户端就可以实现库表级操作、实时监控、实例会话管理、SQL 窗口等操作;同时也有智能监控、健康管理分析等辅助工具,非常适合我这种懒人。
  • 遇到的一些小问题:
  1. 将这个程序部署到腾讯云服务器的时候,发现使用内网地址连接不了这个 TDSQL-C 数据库,但是公网没问题,可是想着内网可以有更高的效率,于是一直排查,最后也是从文档上发现,原来轻量型不能直接通过内网地址连接 TDSQL-C MySQL 版进行访问,使用 云联网 互通

在这里插入图片描述

  1. 期间在对数据库进行压力测试的时候,出现 Too many connections,后续排查发现是因为数据库默认连接数是 80

在这里插入图片描述
后面将这个默认值改大之后就再也没出现过了:
在这里插入图片描述

参考文献

腾讯云TDSQL-C官方文档
feapder框架

相关文章:

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据 文章目录 【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据前言出现的背景一、TDSQL-C数据库是什么?二、TDSQL-C 的特点三、TDSQL-C的应用场景四、基于TD…...

leetcode 6450. k-avoiding 数组的最小总和

给你两个整数 n 和 k 。 对于一个由 不同 正整数组成的数组,如果其中不存在任何求和等于 k 的不同元素对,则称其为 k-avoiding 数组。 返回长度为 n 的 k-avoiding 数组的可能的最小总和。 示例 1: 输入:n 5, k 4 输出&#…...

变压器绝缘油耐压试验

试验目的 绝缘油是电气设备常用的绝缘、 灭弧和冷却介质。 为保证它在运行过程中具有良好的性能, 必须定期对其进行各项试验, 尤其是耐压试验。 绝缘油的耐压试验是在专用的击穿电压试验器中进行的, 试验器包括一个瓷质或玻璃油杯、 两个直径…...

Windows控制台API官方文档

2023年8月21日,周下午 中文文档:控制台函数 - Windows Console | Microsoft Learn 英文文档:Console Functions - Windows Console | Microsoft Learn...

PyTorch DataLoader 报错 “DataLoader worker exited unexpectedly“ 的解决方案

注意:博主没有重写d2l的源代码文件,而是创建了一个新的python文件,并重写了该方法。 一、代码运行日志 C:\Users\Administrator\anaconda3\envs\limu\python.exe G:/PyCharmProjects/limu-d2l/ch03/softmax_regression.py Traceback (most r…...

【AI绘画--七夕篇】:七夕特别教程,使用SDXL绘制你的心上人(Stable Diffusion)(封神榜—妲己)

目录 前言0、介绍0-0、结果展示0-1、Stable Diffusion0-2、sdxl介绍 一、云端部署Stable Diffusion1-1、云端平台的优势 二、平台介绍三、注册账号并且开始炼制3-1、购买算力并创建工作空间3-2、启动工作空间3-3、应用市场一键安装3-4、使用Stable-Diffusion作图 四、有女朋友的…...

hadoop2的集群数据将副本存储在hadoop3

在 Hadoop 集群中,HDFS 副本是分布式存储的,会存储在不同的节点上。因此,如果您的 HDFS 所在路径是在 Hadoop2 集群中,您可以在 Hadoop3 集群上添加新的节点,并向 Hadoop3 集群中添加这些新节点上的数据副本。 以下是…...

c# ??=

空合并运算符 ??,用于定义引用类型和可空类型的默认值。如果此运算符的左操作符不为Null,则此操作符返回左操作数,否则返回右操作数。 例如: //当a不为空时返回a,为null时返回b var c a ?? b;空合并赋值运算符??…...

存储系统性能优化中IOMMU的作用是什么?

一、IOMMU原理 IOMMU(Input/Output Memory Management Unit)是一种用于管理计算机内存的技术,它允许将物理内存映射到虚拟地址空间。IOMMU通过使用专用的硬件来管理和优化内存访问,从而提高系统性能和稳定性。本文将详细介绍IOMMU的原理,并介绍一些应用案例和典型的问题解…...

localhost:8080 is already in use

报错原因:本机的8080端口号已经被占用。因为机器的空闲端口号是随机分配的,而idea默认启动的端口号是8080,所以是存在这种情况。 对于这个问题,我们只需要重启idea或者修改项目的启动端口号即可。 更推荐第二种。对于修改项目启动端口号&…...

机器学习深度学习——NLP实战(自然语言推断——数据集)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——NLP实战(情感分析模型——textCNN实现) 📚订阅专栏:机器…...

攻防世界-simple_php

原题 解题思路 flag被分成了两个部分:flag2,flag2。获得flag1需要满足变量a0且变量a≠0,这看起来不能实现,但实际上当变量a的值是字符时,与数字比较会发生强制类型转换,所以a为字符型数据即可,变…...

2023MyBatis 八股文——面试题

MyBatis简介 1. MyBatis是什么? MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及 获取结果集。MyBa…...

解决出海痛点:亚马逊云科技助力智能涂鸦,实现设备互联互通

今年6月,《财富》(中文版)发布“2023年值得关注的中国出海主力”盘点,在七个赛道中聚焦不断开拓新领域、影响力与日俱增的出海企业。涂鸦智能顺利入选,作为一家全球化公司,相比于产品直接到海外销售的传统出…...

国际刑警组织逮捕 14 名涉嫌盗窃 4000 万美元的网络罪犯

Bleeping Computer 网站披露,4 月份,国际刑警组织发动了一起为期四个月,横跨 25 个非洲国家的执法行动 “Africa Cyber Surge II”,共逮捕 14 名网络犯罪嫌疑人,摧毁 20000 多个从事勒索、网络钓鱼、BEC 和在线诈骗的犯…...

MySQL卸载-Linux版

MySQL卸载-Linux版 停止MySQL服务 systemctl stop mysqld 查询MySQL的安装文件 rpm -qa | grep -i mysql 卸载上述查询出来的所有的MySQL安装包 rpm -e mysql-community-client-plugins-8.0.26-1.el7.x86_64 --nodeps ​ rpm -e mysql-community-server-8.0.26-1.el7.x86_64 -…...

快速学会创建uni-app项目并了解pages.json文件

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 前言 创建 uni-app 项目 通过 HBuilderX 创建 pages.json pages style globalStyle tabBar 前言…...

选云服务器还是物理服务器

选云服务器还是物理服务器 一、为什么需要云服务器或独立服务器取代共享主机 在最早之前,大多数的网站都是共享主机开始的,这里也包含了云虚拟机。这一类的站点还有其他站点都会共同托管在同一台服务器上。但是这种共享机只适用于小的网站,如…...

最新ChatGPT网站AI系统源码+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库/

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&#xff01…...

Web3 游戏七月洞察:迈向主流采用的临界点?

作者: lesleyfootprint.network 2023 年 7 月,Web3 游戏领域出现了小幅增长,但对于许多项目来说,用户采用仍然是一个持续的挑战。根据 Footprint Analytics 的数据,活跃的区块链游戏数量略有增加,达到 2,471 个。然而…...

Python爬虫——scrapy_多网页下载

在DangSpider类中设置一个基础url base_url http://category.dangdang.com/pg page 1在parse方法中 # 每一页的爬取逻辑都是一样的&#xff0c;所以只需要执行每一页的请求再次调用parse方法就可以了if self.page < 100:self.page 1url self.base_url str(self.page)…...

JDK JRE JVM 三者之间的详解

JDK : Java Development Kit JRE: Java Runtime Environment JVM : JAVA Virtual Machine JDK : Java Development Kit JDK : Java Development Kit【 Java开发者工具】&#xff0c;可以从上图可以看出&#xff0c;JDK包含JRE&#xff1b;java自己的一些开发工具中&#…...

excel常见的数学函数篇2

一、数学函数 1、ABS(number)&#xff1a;返回数字的绝对值 语法&#xff1a;ABS(数字)&#xff1b;返回数字的绝对值&#xff1b;若引用单元格&#xff0c;把数字换为单元格地址即可 2、INT(number)&#xff1a;向小取整 语法&#xff1a;INT(数字)&#xff1b;若引用单元格…...

Certify The Web (IIS)

一、简介 Certify The Web 适用于 Windows的SSL 证书管理器用户界面&#xff0c;与所有 ACME v2 CA 兼容&#xff0c;为您的 IIS/Windows 服务器轻松地安装和自动更新来自 Letencrypt.org 和其他 ACME 证书授权机构的免费 SSL/TLS 证书&#xff0c;设置 https 从未如此简单。 …...

【c语言】五子棋(EasyX图形库+背景音乐)

大家好&#xff0c;有没有觉得写了好多c语言代码&#xff0c;面对的都是黑框框控制台&#xff0c;当我们学习了基础的c语言知识&#xff0c;和EasyX图形库后&#xff0c;终于可以和黑框框saygoodbye,今天要分享给大家的是小游戏五子棋&#xff0c;跟着小张一起学习吧 EasyX图形…...

【OpenCV 】对极几何标定质量验证

标定质量验证&#xff1a; 寻找一对对应点&#xff0c;已经知道对应关系及其详细坐标&#xff0c;根据对极几何推导实现 ///get the camera intrinsics and T_Ci_Bstd::vector<Eigen::Matrix3d> M_K;std::vector<Eigen::Matrix4d> T_Ci_B;for (int i 0; i < ne…...

Netty:ByteBuf的清空操作

说明 io.netty.buffer.ByteBuf有个函数clear()&#xff0c;它可以将ByteBuf的readerIndex和writerIndex都设置为0。 代码示例 package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled;public class Demo {public static void main(String[] args…...

SpringCloud最新最全面试题

目录 一、简单说一说什么是微服务&#xff1f; 二、微服务有哪些优缺点&#xff1f; 三、微服务、分布式、集群的区别&#xff1f; 四、什么是Eureka&#xff1f; 五、Eureka有那两大组件&#xff1f; 六、actuator是什么&#xff1f; 七、Discovery是什么&#xff1f; …...

leetcode359周赛

2828. 判别首字母缩略词 核心思想:枚举。只需要枚举首字母和s是否一一对应即可。 2829. k-avoiding 数组的最小总和 核心思想&#xff1a;自己的方法就是哈希表&#xff0c;枚举i的时候&#xff0c;将k-i统计起来&#xff0c;如果出现了那么就跳过。灵神的方法是数学法&#…...

nginx代理webSocket链接响应403

一、场景 使用nginx代理webSocket链接&#xff0c;nginx响应403 1、nginx访问日志响应403 [18/Aug/2023:09:56:36 0800] "GET /FS_WEB_ASS/webim_api/socket/message HTTP/1.1" 403 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit…...

websocker无法注入依赖

在公司中准备用websocker统计在线人数&#xff0c;在WebSocketServer使用StringRedisTemplate保存数据到redis中去&#xff0c;但是在保存的时候显示 StringRedisTemplate变量为null 详细问题 2023-08-20 10:37:14.109 ERROR 28240 --- [nio-7125-exec-1] o.a.t.websocket.po…...

如何进行无线网络渗透测试?

我们将重点介绍如何使用Kali Linux进行无线网络渗透测试。无线网络渗透测试是评估无线网络安全性的重要步骤&#xff0c;而Kali Linux作为一款专业的渗透测试发行版&#xff0c;提供了丰富的工具来进行这项任务。 1. 准备工作 在开始无线网络渗透测试之前&#xff0c;有一些准…...

【Python机器学习】实验15 将Lenet5应用于Cifar10数据集(PyTorch实现)

文章目录 CIFAR10数据集介绍1. 数据的下载2.修改模型与前面的参数设置保持一致3. 新建模型4. 从数据集中分批量读取数据5. 定义损失函数6. 定义优化器7. 开始训练8.测试模型 9. 手写体图片的可视化10. 多幅图片的可视化 思考题11. 读取测试集的图片预测值&#xff08;神经网络的…...

Jeep车型数据源:提供Jeep品牌车系、车型、价格、配置等信息

​​​​​ Jeep是一个极具特色的汽车品牌&#xff0c;它的所有车型都注重实用性&#xff0c;具有越野性能和高性能。Jeep品牌在汽车行业中的口碑一直是非常不错的。如果你想要了解Jeep品牌车系、车型、价格、配置等信息&#xff0c;就可以通过挖数据平台Jeep车型数据源API接口…...

clickhouse-备份恢复

一、简介 备份恢复是数据库常用的手段&#xff0c;可能大多数公司很少会对大数据所使用的数据进行备份&#xff0c;这里还是了解下比较好&#xff0c;下面做了一些简单的介绍&#xff0c;详细情况可以通过官网来查看&#xff0c;经过测试发现Disk中增量备份并不好用&#xff0…...

(2018,ProGAN)渐进式发展 GAN 以提高质量、稳定性和变化

Progressive Growing of GANs for Improved Quality, Stability, and Variation 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. GAN 的渐进式发展 3. 使用小批量标准差增加变化 4. 生成器和判别器的归一化 4.1 均衡学习率 4.2 生成器中的像素特征向量归一化 5. 评…...

负载均衡下的 WebShell 连接

目录 负载均衡简介负载均衡的分类网络通信分类 负载均衡下的 WebShell 连接场景描述难点介绍解决方法**Plan A** **关掉其中一台机器**&#xff08;作死&#xff09;**Plan B** **执行前先判断要不要执行****Plan C** 在Web 层做一次 HTTP 流量转发 &#xff08;重点&#xff0…...

Postman的高级用法—Runner的使用​

1.首先在postman新建要批量运行的接口文件夹&#xff0c;新建一个接口&#xff0c;并设置好全局变量。 2.然后在Test里面设置好要断言的方法 如&#xff1a; tests["Status code is 200"] responseCode.code 200; tests["Response time is less than 10000…...

spring如何进行依赖注入,通过set方法把Dao注入到serves

1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的&#xff1a; 3、我们在UserController中执行一下具体写法&#xff1a; 最后我们执行一下 &#xff1a; 4、这里可能出现空指针&#xff0c;因为你当前web层,因为你new这个对象根…...

Python使用图像处理库PIL(Python Imaging Library)和NumPy库来比较两副图像的相似度

目录 1、解释说明&#xff1a; 2、使用示例&#xff1a; 3、注意事项&#xff1a; 1、解释说明&#xff1a; 在Python中&#xff0c;我们可以使用图像处理库PIL&#xff08;Python Imaging Library&#xff09;和NumPy库来比较两副图像的相似度。常用的图像相似度计算方法有…...

clickhouse扩缩容

一、背景 我们之前已经学会了搭建clickhouse集群&#xff0c;我们搭建的是一套单分片两副本的集群&#xff0c;接下来我们来测试下clickhouse的扩缩容情况 二、扩容 扩容相对来说比较简单&#xff0c;我们原来的架构如下 hostshardreplica192.169.1.111192.169.1.212 现在…...

动漫3D虚拟人物制作为企业数字化转型提供强大动力

一个 3D 虚拟数字人角色的制作流程&#xff0c;可以分为概念设定-3D 建模-贴图-蒙皮-动画-引擎测试六个步骤&#xff0c;涉及到的岗位有原画师、模型师、动画师等。角色概念设定、贴图绘制一般是由视觉设计师来完成;而建模、装配(骨骼绑定)、渲染动画是由三维设计师来制作完成。…...

数据同步工具比较:选择适合您业务需求的解决方案

在当今数字化时代&#xff0c;数据已经成为企业的核心资产。然而&#xff0c;随着业务的扩展和设备的增多&#xff0c;如何实现数据的高效管理和同步成为了一个亟待解决的问题。本文将介绍几种常见的数据同步工具&#xff0c;并对比它们的功能、性能和适用场景&#xff0c;帮助…...

Python中数据结构列表详解

列表是最常用的 Python 数据类型&#xff0c;它用一个方括号内的逗号分隔值出现&#xff0c;列表的数据项不需要具有相同的类型。 列表中的每个值都有对应的位置值&#xff0c;称之为索引&#xff0c;第一个索引是 0&#xff0c;第二个索引是 1&#xff0c;依此类推。列表都可…...

引领行业高质量发展|云畅科技参编《低代码开发平台创新发展路线图(2023)》

8月8日-9日&#xff0c;中国电子技术标准化研究院于北京顺利召开《低代码开发平台创新发展路线图&#xff08;2023&#xff09;》封闭编制会。云畅科技、浪潮、百度、广域铭岛等来自低代码开发平台解决方案供应商、用户方、科研院所等近30家相关单位的40余位专家参与了现场编制…...

Ubuntu22.04编译Nginx源码

执行如下命令 # ./configure --sbin-path/usr/local/nginx/nginx --conf-path/usr/local/nginx/nginx.conf --pid-path/usr/local/nginx/nginx.pid输出结果&#xff0c;出现如下&#xff1a; Configuration summary using system PCRE2 library OpenSSL library is not used …...

视频上传,限制时长,获取视频时长

使用element的upload上传文件时&#xff0c;除了类型和大小&#xff0c;需求需要限制只能长传18秒内的视频&#xff0c;这里通过upload的before-upload&#xff0c;以及创建一个音频元素对象拿到durtaion时长属性来实现。 getVideoTime(file) {return new Promise(async (resol…...

Open3D 进阶(5)变分贝叶斯高斯混合点云聚类

目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 系列文章(连载中。。。爬虫,你倒是爬个完整的呀?): Open3D 进阶(1) MeanShift点云聚类Open3D 进阶(2)DB…...

5、css学习5(链接、列表)

1、css可以设置链接的四种状态样式。 a:link - 正常&#xff0c;未访问过的链接a:visited - 用户已访问过的链接a:hover - 当用户鼠标放在链接上时a:active - 链接被点击的那一刻 2、 a:hover 必须在 a:link 和 a:visited 之后&#xff0c; a:active 必须在 a:hover 之后&…...

Synchronized与Java线程的关系

前言 ​ Java多线程处理任务时&#xff0c;为了线程安全&#xff0c;通常会对共享资源进行加锁&#xff0c;拿到锁的线程才能进行访问共享资源。而加锁方式通过都是Synchronized锁或者Lock锁。 ​ 那么多线程在协同工作的时候&#xff0c;线程状态的变化都与锁对象有关系。 …...