【腾讯云 TDSQL-C Serverless 产品体验】国产数据库遥遥领先

news2024/11/29 16:26:23

一、为什么选TDSQL-C

1、性能达到每分钟8.14亿笔交易

国产数据库傲立世界之巅!腾讯云数据库TDSQL-C性能刷新世界记录。

由TPC发起的TPC-C是针对在线事务处理(OLTP)的基准测试模型,是全球数据库厂商公认的性能评价标准,被誉为数据库领域的“奥林匹克”。它通过模拟一个超大型高并发的交易场景,对数据库服务的稳定性、性能、容灾等能力进行测试,对数据库的技术要求极高。

过去,TPC-C可以说是微软、甲骨文、IBM等海外传统数据库厂商竞技的舞台。此次腾讯云数据库TDSQL获第一、破纪录,也意味着国产数据库正在实现科技自立自强,并用不断夯实的技术实力,对海外传统数据库厂商进行了漂亮的反超回击。

从TPC官网公布的测试结果可以看到,为了通过TPC-C测试,腾讯云在性能、稳定性和容灾能力等方面都做到极致升级。比如,其内存性能做到了单节点支持180万QPS (Queries PerSecond,每秒查询率)。

2、云数据库VS云原生数据库

简而言之传统数据库既有的问题其实中云上是没有得到解决的

第一云数据库的出现是为了解决线下到线上的痛点。就是说首先在云计算出现之前,用户需要资源的时候,他需要去申请实例的时候,他首先要准备服务器,然后服务器上架之后,要安装部署操作系统,数据库软件,然后才能交付。那么云计算时代到来之后呢?云厂商提供给客户云的数据库服务。作为云厂商啊,我们可以把传统的数据库搬到云上来。给客户以租用的这种方式提供服务,实现一个资源的这个快速按需购买。

那么第二个呢,就是说我们的这个业务啊,根据自身的一个对性能可靠性啊,或者可用性的一些考虑,那选择不同的方式复制啊,在不同的一个容灾级别,比如说跨交换机,跨机房,跨可用区,跨我们的区域啊,这些呢,在云上啊,我们都是基于这种他的可靠性,可用性。

第三个呢,在云上啊,会提供各种比较丰富的一些监控能力。当我们的业务,比如出现问题的时候呢,那他可以快速的协助帮助定位问题。但是往往都是事中或者事后分析的。所以当我们发现传统数据库在云上有很多的问题。那这些问题呢,是传统数据库既有的问题,就是传统数据库本身有的问题,你迁到云上去还是有这样的问题。所以在云上并没有得到解决。也不适应云在扩展性、可靠性和规模性的的一些优势。那这个时候呢,我们迫切呢,需要用云厂商来考虑如何将我们传统的这种数据库和云计算做一个融合。

这个就是云原生。那云原生这个概念出现了。那我们把它简单的可以认为是相当于对之前的云数据库的一个全面的一个升级啊,这是技术发展到一定程度之后的一个必然结果。我们发现用户啊,申请的时候希望快速交付而且呢,我在使用过程当中啊。比如说我们在做一些618的活动啊,双11等等一些这个促销活动啊。要增加资源的时候能快速的扩容。而对传统的那种单机冗余架构来讲我们做这种弹性伸缩的话需要一个数据搬迁然后会十分的耗时。

3、成本低

TDSQL-C支持计算和存储分离,例如扩容的时候咱们需要多少存储就购买多少。不会存在只需要存储不需要计算的情况下还浪费了计算资源的情况。

TDSQL-C云原生还实现了人员的降本增效,实现自动化运维之后可以减少人工干预的可能性。简而言之就是之前搬到云上的服务已经可以通过AI进行管理,人员成本就降低了。

我身边实打实的例子就是某些公司花高价请运维工程师从0开始搭建k8s架构,3个月时间搞定之后让人家把文档留下找个借口说试用期没过。然后在公司内部给员工画饼年底加薪,让员工通过文档快速上手使用。哪怕员工提出以后出问题不好维护的疑问,人家云淡风轻地说大不了再花钱找一个解决之后留下文档让他走人。

二、TDSQL-C产品体验

2.1、体验思路

使用 Python 向 TDSQL-C 添加读取数据 实现词云图

本次我们使用python 语言 进行TDSQL Serverless MySQL 进行体验, 实现思路如下:

  1. 读取多个本地的 excel 文件 ,并将读取的数据存储到TDSQL 中
  2. TDSQL 读取存储的数据
  3. 将读取的数据生成词云图,并展示

2.2、体验步骤

1. 选购TDSQL资源

打开浏览器输入腾讯云官网地址:http://cloud.tencent.com

或者点击链接直接进入腾讯云 产业智变·云启未来 - 腾讯 (tencent.com)icon-default.png?t=N7T8https://cloud.tencent.com/

免费注册登录之后在搜索框中输入TDSQL-C MYSQL,点击立即选购

2、数据库配置

注意必须选择本次体验的实例Serverless

算力配置中的自动暂停功能就相当于从前家家户户喝水都要打井,然后现在变成了自来水,水龙头可以自由调度水资源。

计费模式也特别划算,按量计费适用于夜间用户量骤降时可以节约成本

针对流量起伏小的服务性价比很高

3、创建集群

创建集群时注意记住管理员密码和集群名

这里可以发现TDSQL支持一键配置数据库端口号、安全组、表名大小写敏感、指定项目等

真的是解放双手的利器,避免了重复做那些基础操作而费时费力。

这里需要注意的是将外部读写地址开启,最后点击授权并创建之后记住主机名和端口号即可。

这样做的目的就是方便我们使用数据库管理工具进行外部的连接及使用。

4、外部连接数据库

使用数据库管理工具Navicat连接腾讯云的TDSQL

5、创建对应的库

可以直接在Navicat中创建,就是使用和管理数据库实例不太方便。

也可以登录TDSQL-C的数据库管理(DMC)进行创建。(这就是TDSQL强大的地方,可以更加便捷、规范地管理多种数据库实例)

数据库管理(DMC)是一个高效、可靠的一站式数据库管理平台,为用户提供库表级操作、实时监控、实例会话管理、SQL窗口、数据管理为一体的数据库管理服务,帮您更加便捷、规范地管理多种数据库实例。

有比较实用的功能,比如,查看一些非法连接,会活等信息,体验了一下,基
本上满足实际开发的需求。

提供了参数模板,可以自定义的设置符合自己业务需求的参数模板,如果下次再有需要购买数据库实例,可以直接使用新建好的模板。

6、项目目录结构

Excel文件地址如下 : 词频.zipicon-default.png?t=N7T8https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/%E8%AF%8D%E9%A2%91.zip

背景图地址: background.PNG.zipicon-default.png?t=N7T8https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/background.PNG.zip

字体文件(可选): PingFangBold.ttficon-default.png?t=N7T8https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/PingFangBold.ttf

  1. pycharm 工具中创建项目目录
  2. 将下载的文件放到工程目录中
  3. 在工程目录中创建一个空文件夹,命名词云图

7、创建读取excel文件的函数

def excelTomysql():
    path = '词频'  # 文件所在文件夹
    files = [path + "/" + i for i in os.listdir(path)]  # 获取文件夹下的文件名,并拼接完整路径
    for file_path in files:
        print(file_path)
        filename = os.path.basename(file_path)
        table_name = os.path.splitext(filename)[0]  # 使用文件名作为表名,去除文件扩展名
        # 使用pandas库读取Excel文件
        data = pd.read_excel(file_path, engine="openpyxl", header=0)  # 假设第一行是列名
        columns = {col: "VARCHAR(255)" for col in data.columns}  # 动态生成列名和数据类型

        create_table(table_name, columns)  # 创建表
        save_to_mysql(data, table_name)  # 将数据保存到MySQL数据库中,并使用文件名作为表名
        print(filename + ' uploaded and saved to MySQL successfully')

8、根据excel文件名创建数据库表名

def create_table(table_name, columns):
    # 建立MySQL数据库连接
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    # 组装创建表的 SQL 查询语句
    query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
    for col_name, col_type in columns.items():
        query += f"{col_name} {col_type}, "
    query = query.rstrip(", ")  # 去除最后一个逗号和空格
    query += ")"

    # 执行创建表的操作
    cursor.execute(query)

    # 提交事务并关闭连接
    conn.commit()
    cursor.close()
    conn.close()

9、将读取的excel 数据保存到数据库对应的表中

def save_to_mysql(data, table_name):
    # 建立MySQL数据库连接
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    # 将数据写入MySQL表中(假设数据只有一个Sheet)
    for index, row in data.iterrows():
        query = f"INSERT INTO {table_name} ("
        for col_name in data.columns:
            query += f"{col_name}, "
        query = query.rstrip(", ")  # 去除最后一个逗号和空格
        query += ") VALUES ("
        values = tuple(row)
        query += ("%s, " * len(values)).rstrip(", ")  # 动态生成值的占位符
        query += ")"
        cursor.execute(query, values)

    # 提交事务并关闭连接
    conn.commit()
    cursor.close()
    conn.close()

10、读取数据库中存入的数据

def query_data():
    # 建立MySQL数据库连接
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    # 查询所有表名
    cursor.execute("SHOW TABLES")
    tables = cursor.fetchall()

    data = []
    dic_list = []
    table_name_list = []
    for table in tables:
        # for table in [tables[-1]]:
        table_name = table[0]
        table_name_list.append(table_name)
        query = f"SELECT * FROM {table_name}"
        # # 执行查询并获取结果
        cursor.execute(query)
        result = cursor.fetchall()
        if len(result) > 0:
            columns = [desc[0] for desc in cursor.description]
            table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
            data.extend(table_data)
        dic = {}
        for i in data:
            dic[i['word']] = float(i['count'])
        dic_list.append(dic)

    conn.commit()
    cursor.close()
    conn.close()
    return dic_list, table_name_list

11、执行函数,并生成词云图


if __name__ == '__main__':
    ##excelTomysql()方法将excel写入到mysql
    excelTomysql()
    print("excel写入到mysql成功!")
    # query_data()方法将mysql中的数据查询出来,每张表是一个dic,然后绘制词云
    result_list, table_name_list = query_data()
    print("从mysql获取数据成功!")
    for i in range(len(result_list)):
        maskImage = np.array(Image.open('background.PNG'))  # 定义词频背景图
        # 定义词云样式
        wc = wordcloud.WordCloud(
            font_path='PingFangBold.ttf', # 设置字体
            mask=maskImage,  # 设置背景图
            max_words=500,  # 最多显示词数
            max_font_size=100)  # 字号最大值
        # 生成词云图
        wc.generate_from_frequencies(result_list[i])  # 从字典生成词云
        # 保存图片到指定文件夹
        wc.to_file("词云图/{}.png".format(table_name_list[i]))
        print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png'))
        # 在notebook中显示词云图
        plt.imshow(wc)  # 显示词云
        plt.axis('off')  # 关闭坐标轴
        plt.show()  # 显示图像

12、词云图效果展示

13、运行结果展示

14、完整代码

import pymysql
import pandas as pd
import os
import wordcloud
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# MySQL数据库连接配置
db_config = {
    'host': "gz-xxxxxxysql-grp-kb212sal.sql.tencentcdb.com",  # 主机名
    'port': 25648,  # 端口
    'user': "root",  # 账户
    'password': "TDSQL-C@!@Rgpk14.",  # 密码
    'database': 'db0',

}
def create_table(table_name, columns):
    # 建立MySQL数据库连接
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    # 组装创建表的 SQL 查询语句
    query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
    for col_name, col_type in columns.items():
        query += f"{col_name} {col_type}, "
    query = query.rstrip(", ")  # 去除最后一个逗号和空格
    query += ")"

    # 执行创建表的操作
    cursor.execute(query)

    # 提交事务并关闭连接
    conn.commit()
    cursor.close()
    conn.close()


def excelTomysql():
    path = '词频'  # 文件所在文件夹
    files = [path + "/" + i for i in os.listdir(path)]  # 获取文件夹下的文件名,并拼接完整路径
    for file_path in files:
        print(file_path)
        filename = os.path.basename(file_path)
        table_name = os.path.splitext(filename)[0]  # 使用文件名作为表名,去除文件扩展名
        # 使用pandas库读取Excel文件
        data = pd.read_excel(file_path, engine="openpyxl", header=0)  # 假设第一行是列名
        columns = {col: "VARCHAR(255)" for col in data.columns}  # 动态生成列名和数据类型

        create_table(table_name, columns)  # 创建表
        save_to_mysql(data, table_name)  # 将数据保存到MySQL数据库中,并使用文件名作为表名
        print(filename + ' uploaded and saved to MySQL successfully')


def save_to_mysql(data, table_name):
    # 建立MySQL数据库连接
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    # 将数据写入MySQL表中(假设数据只有一个Sheet)
    for index, row in data.iterrows():
        query = f"INSERT INTO {table_name} ("
        for col_name in data.columns:
            query += f"{col_name}, "
        query = query.rstrip(", ")  # 去除最后一个逗号和空格
        query += ") VALUES ("
        values = tuple(row)
        query += ("%s, " * len(values)).rstrip(", ")  # 动态生成值的占位符
        query += ")"
        cursor.execute(query, values)

    # 提交事务并关闭连接
    conn.commit()
    cursor.close()
    conn.close()


def query_data():
    # 建立MySQL数据库连接
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    # 查询所有表名
    cursor.execute("SHOW TABLES")
    tables = cursor.fetchall()

    data = []
    dic_list = []
    table_name_list = []
    for table in tables:
        # for table in [tables[-1]]:
        table_name = table[0]
        table_name_list.append(table_name)
        query = f"SELECT * FROM {table_name}"
        # # 执行查询并获取结果
        cursor.execute(query)
        result = cursor.fetchall()
        if len(result) > 0:
            columns = [desc[0] for desc in cursor.description]
            table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
            data.extend(table_data)
        dic = {}
        for i in data:
            dic[i['word']] = float(i['count'])
        dic_list.append(dic)

    conn.commit()
    cursor.close()
    conn.close()
    return dic_list, table_name_list


if __name__ == '__main__':
    ##excelTomysql()方法将excel写入到mysql
    excelTomysql()
    print("excel写入到mysql成功!")
    # query_data()方法将mysql中的数据查询出来,每张表是一个dic,然后绘制词云
    result_list, table_name_list = query_data()
    print("从mysql获取数据成功!")
    for i in range(len(result_list)):
        maskImage = np.array(Image.open('background.PNG'))  # 定义词频背景图
        # 定义词云样式
        wc = wordcloud.WordCloud(
            font_path='PingFangBold.ttf', # 设置字体
            mask=maskImage,  # 设置背景图
            max_words=500,  # 最多显示词数
            max_font_size=100)  # 字号最大值
        # 生成词云图
        wc.generate_from_frequencies(result_list[i])  # 从字典生成词云
        # 保存图片到指定文件夹
        wc.to_file("词云图/{}.png".format(table_name_list[i]))
        print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png'))
        # 在notebook中显示词云图
        plt.imshow(wc)  # 显示词云
        plt.axis('off')  # 关闭坐标轴
        plt.show()  # 显示图像

直接复制粘贴然后把项目文件导入之后即可运行,如有问题评论区见

三、TDSQL-C的体验感受

1、TDSQL -C MySQL的分类

把数据库类型按照关系型和非关系型来分的话,TDSQL-C for MySQL Serverless版的类型会归到NewSQL的类型中。

2、TDSQL -C MySQL Serverless的架构

NewSQL从传统数据库到云原生数据库的进化,也是数据库在架构上不断随着业务和技术的迭代创新的过程。TDSQL-C MySQL Serverless整体架构其实是把计算层和存储层进行了完全分离,实现了计算节点无状态方式,100%兼容MySQL协议。

3、与MySQL的对比

不同用户在不同规格和业务情况下,它们的参数是否都能适应好自己数据库所运行的最大状态。TDSQL -C MySQL Serverless通过深度学习算法对于业务进行优先分析,来给用户推荐当前数据库应该将哪些参数调整至什么样的值,能够获得多少的性能提升,给用户提出智能调优方案。

TDSQL -C MySQL Serverless在灵活性、成本上提供了更多的选择、更灵活的配置、更低成本架构,如支持单节点,在性能不需要这么强的情况下,写日志历史库或者合并库,另外的场景,如需要很大容量,并不需要很高的性能,都可以通过这个方式来解决问题。

四、应用场景

1、游戏应用

  • 敏捷灵活的弹性扩展,无需预先购买存储,可根据业务需要快速升降级,快速扩容,轻松应对业务峰值。
  • 最高支持 PB 级海量存储,按存储量计费,自动扩容,免去合区合服的繁琐操作,实现资源和成本的最优配置。
  • 秒级的快照备份和快速回档能力,在多副本的基础上对用户的数据进行连续保护,是游戏行业的最佳选择。

2、电商/直播/教育

  • 支持分钟级的升配,最多可扩展至15个节点,快速弹升 IOPS 的能力。解决传统数据库的升配时间会随着存储量的大小、宿主机资源的情况而不断上升的问题。
  • 通过引擎的优化 IOPS 能力的提升,提供高并发状态下优秀的数据写入能力,轻松应对业务峰值。
  • 主节点和读节点之间采用物理复制的方式,读节点与主节点延迟大大降低,满足电商场景中买家卖家数据一致性读取需求。

3、金融/保险

  • 多可用区架构,在多个可用区内都有数据备份,为数据库提供容灾和备份。通过全球数据库网络功能实现数据的异地灾备,跨地域实例可同时读写,且业务无需修改代码,即可直接从同城部署扩展到异地部署。
  • 采用白名单、VPC 网络等全方位的手段,对数据库数据访问、存储、管理等各个环节提供安全保障。
  • 采用共享分布式存储的设计,彻底解决了主从异步复制所带来的备库数据非强一致性的问题。

4、互联网/移动APP

  • 商用数据库级别的高性能、高可靠, 较低成本使得 TDSQL-C MySQL 版成为互联网关键业务的最佳选择。定制开发的多项内核优化以及企业级特性保障业务平稳高效的运行,让研发人员专注于业务逻辑的开发,无后顾之忧。
  • 解决了传统主备架构弹性能力差,业务压力大时的同步效率低,主备切换时间不可控等问题,在提供高性能同时保证了系统的高可用性和业务的连续性。极大的减轻了运营和运维人员的工作量。
  • 全面兼容开源数据库 MySQL,原有业务应用几乎不用更改即可接入 TDSQL-C MySQL 版,助力企业平滑上云。

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

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

相关文章

解决WIFI网络登录困难的方法

当你遇到手机WIFI网络在连接成功后,总是提示网络受限或者当前网络无法连接互联网,但过一段时间后它又自动恢复正常的的问题,可以尝试用以下方法来解决。 第一步:打开WLAN连接设置界面,选择“更多设置” 第二步&#x…

关于TUM数据集

2、验证回环检测算法,需要有人工标记回环的数据集。然而人工标记回环是很不方便的,我们会考虑根据标准轨迹计算回环。即,如果轨迹中有两个帧的位姿非常相近,就认为它们是回环。请根据TUM数据集给出的标准轨迹,计算出一…

Flink中的状态一致性

1.概念 一致性其实就是结果的正确性。对于分布式系统而言,从不同节点读取时总能得到相同的值;而对于事务而言,是要求提交更新操作后,能够读取到新的数据。 有状态的流处理,内部每个算子任务都可以有自己的状态。对于流…

域环境介绍

一、概述 内网也指局域网,指的是某个区域由多台计算机互连而成的计算机组,范围通常在数千米以内,在局域网中,可以实现文件管理,应用软件共享,打印机共享、工作组内的日程安排、电子邮件和传真通信服务等&a…

【微服务保护】

文章目录 Sentinel 微服务雪崩问题: 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。服务D有 故障进而导致服务A有故障,进而导致服务雪崩。 解决雪崩问题的常见方式有四种: 超时处理&#xff1…

iPhone苹果手机复制粘贴内容提示弹窗如何取消关闭提醒?

经常使用草柴APP查询淘宝、天猫、京东商品优惠券拿购物返利的iPhone苹果手机用户,复制商品链接后打开草柴APP粘贴商品链接查券时总是弹窗提示粘贴内容,为此很多苹果iPhone手机用户联系客服询问如何关闭iPhone苹果手机复制粘贴内容弹窗提醒功能的方法如下…

毛玻璃态按钮悬停效果

效果展示 页面结构组成 通过上述的效果展示可以看出如下几个效果 毛玻璃的按钮按钮上斜边背景及动画按钮上下边缘的小按钮和小按钮动画 CSS3 知识点 backdrop-filter 属性transition 属性transform 属性 实现基础按钮结构 <div class"btn"><a href&qu…

第三章 C运算符和控制语句

几乎每一个程序都需要进行运算&#xff0c;对数据进行加工处理&#xff0c;否则程序就没有意义了。要进行运算&#xff0c;就需规定可以使用的运算符。 C语言的运算符范围很宽&#xff0c;把除了控制语句和输人输出以外的几乎所有的基本操作都作为运算符处理。 运算符分类1 除…

【Linux】—— 详解动态库和静态库

前言&#xff1a; 本期我将要给大家讲解的是有关 动态库和静态库 的相关知识&#xff01;&#xff01;&#xff01; 目录 序言 见一见库 为什么要有库 &#xff08;一&#xff09;动态库&#xff08;.so&#xff09; 1.基本概念 2.命名规则 3.制作动态库 &#xff0…

No155.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【KingbaseES】银河麒麟V10 ARM64架构_安装人大金仓数据库KingbaseES_V8R6(CentOS8)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

C# 类型、变量与对象

变量一共7种&#xff1a; 静态变量&#xff08;静态字段&#xff09;、实例变量&#xff08;成员变量、字段&#xff09;、数组元素、值参数、引用参数、输出形参、局部变量 狭义的变量就是局部变量 内存的最小单位是比特&#xff08;byte&#xff09;&#xff0c;8个比特为…

【数据结构】【C++】封装哈希表模拟实现unordered_map和unordered_set容器

【数据结构】&&【C】封装哈希表模拟实现unordered_map和unordered_set容器 一.哈希表的完成二.改造哈希表(泛型适配)三.封装unordered_map和unordered_set的接口四.实现哈希表迭代器(泛型适配)五.封装unordered_map和unordered_set的迭代器六.解决key不能修改问题七.实…

Stm32_标准库_5_呼吸灯_按键控制

Stm32按键和输出差不多 PA1为LED供给正电&#xff0c;PB5放置按键&#xff0c;按键一端接PB5,另一端接负极 void Key_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //APB2总线连接着GPIOBGPIO_InitStructur.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructur.…

Java下对象的序列化和反序列化(写出和读入)

代码如下&#xff1a; public class MyWork {public static void main(String[] args) throws IOException, ClassNotFoundException {//序列化File f new File("testFile/testObject.txt");ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(…

数据结构:堆的实现和堆排序及TopK问题

文章目录 1. 堆的概念和性质1.1 堆的概念1.2 堆的性质1.3 堆的作用 2. 堆的声明3. 堆的实现3.1 堆的插入3.2 删除堆顶元素3.3 利用数组建堆3.4 完整代码 4. 堆的应用4.1 堆排序4.2 TopK问题代码实现 物理结构有顺序结构存储和链式结构存储两种,二叉树理所应当也是可以顺序结构存…

实时通信协议

本文旨在简要解释如何在Web上实现客户端/服务器和客户端/客户端之间的实时通信&#xff0c;以及它们的内部工作原理和最常见的用例。 TCP vs UDP TCP和UDP都位于OSI模型的传输层&#xff0c;负责在网络上传输数据包。它们之间的主要区别在于&#xff0c;TCP在传输数据之前会打开…

26960-2011 半自动捆扎机 学习笔记

声明 本文是学习GB-T 26960-2011 半自动捆扎机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了半自动捆扎机(以下简称"捆扎机")的术语和定义、型号、型式与基本参数、技术要求、 试验方法、检验规则及标志、包装、运…

Python变量的三个特征

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们来看这些代码 x 10 print(x) # 获取变量的变量值 print(id(x)) # 获取变量的id&#xff0c;可以理解成变量在内存中的地址python的内置功能id()&#xff0c;内存地址不一样&#xff0c;则id()后打印的结果不一样&…

【HTML】表格行和列的合并

概述 当我们需要在 HTML 表格中展示复杂的数据时&#xff0c;行和列的合并可以帮助我们实现更灵活的布局和结构。通过合并行和列&#xff0c;我们可以创建具有更多层次和结构的表格&#xff0c;使数据更易于理解和分析。 在 HTML 表格中&#xff0c;我们可以使用 rowspan 和 …