【腾讯云云上实验室】用向量数据库在金融信数据库分析中的实战运用
一、前言
这篇文章将带领读者探索数据库的多样化解决方案及其演进历程,特别关注向量数据库的重要性和在实际项目中的应用。
通过深入剖析腾讯云向量数据库及其在金融信用数据库分析中的实战运用,为读者提供全面而实用的指南,帮助他们理解、应用和掌握这一技术领域的关键要点。
二、数据库的分类种类
现代数据库发展呈现多样化趋势,从传统的关系型和NoSQL数据库到云数据库、云原生数据库和向量数据库,每种都针对特定需求提供定制化解决方案。随着技术不断进步,数据库领域持续创新,满足不断变化的需求。
2.1 演进中的数据库:多样化解决方案应对不断变化的需求
当谈到数据库时,我们可以看到不断的演变和创新。传统自建数据库常常是基于关系型数据库(如MySQL、PostgreSQL)或者NoSQL数据库(比如MongoDB、Cassandra)构建的。这些数据库早期主要用于存储结构化数据,并且在企业和应用程序中广泛使用。
随着云计算的兴起,云数据库应运而生,它们为用户提供了更灵活、可扩展和易管理的解决方案。云数据库包括各种服务,例如Amazon RDS、Google Cloud SQL和Azure Database,它们可以自动化管理和调整数据库的容量和性能,并且提供了高可用性和灾难恢复功能。
而云原生数据库则更专注于在云原生环境下构建和部署的数据库解决方案。这些数据库通常是容器化的,利用了云原生技术(如Kubernetes)来实现更高的弹性、可扩展性和可靠性。
另一个重要的趋势是向量数据库的兴起。这些数据库专注于高维度和复杂数据的处理,比如图像、文本和音频等数据。向量数据库(如Milvus、Faiss)采用向量索引技术,可以更高效地处理和查询大规模的向量数据,这在人工智能、机器学习和大数据分析领域有着广泛的应用。
2.2 什么是向量数据库
(需要更加完善一下,更具体一点)
向量数据库是一种专门用于处理高维度向量数据的数据库类型。它们设计用于存储、索引和高效查询包含向量信息的数据集。这些向量可能代表文本、图像、音频等非结构化或半结构化数据,也可能是从机器学习和深度学习模型中提取的特征。
向量数据库通常采用特定的向量索引结构和算法,以便高效地存储和检索向量数据。它们的设计目标是使得在高维空间中进行相似度搜索或者聚类等操作更加高效,并且能够应对大规模的向量数据集。
这些数据库在人工智能、推荐系统、图像识别、自然语言处理等领域有着广泛的应用。它们可以加速相似向量的快速搜索,从而支持诸如推荐算法、相似图片搜索、文本相似度匹配等应用。 Milvus 和 Faiss 是一些知名的向量数据库。
矢量数据库的重要性源于它们处理大规模高维数据集和执行快速相似性搜索的能力。传统的关系数据库由于结构不灵活且缺乏针对相似性搜索而定制的专门索引技术,因此不适合此类数据。
相比之下,矢量数据库采用一系列专门设计的索引结构和算法,旨在有效处理高维数据并实现快速的最近邻搜索。
2.3 为什么向量数据库如此重要呢?
首先,开发人员能够将生成的嵌入向量索引到向量数据库中。这一举措使得通过查询相似向量来找到相关资产成为可能。
此外,向量数据库提供了一种使嵌入模型高效运行的途径。它利用了复杂的查询语言,整合了资源管理、安全控制、可扩展性、容错能力以及高效信息检索等数据库功能,从而提升了应用程序开发的效率。
更重要的是,向量数据库对于开发人员创造独特的应用体验至关重要。举例来说,用户可以通过在智能手机上拍摄照片来搜索相似的图像,这得益于向量数据库的支持。
此外,开发人员能够利用其他类型的机器学习模型,从图像和扫描文档等内容中自动提取元数据。他们可以将这些元数据与向量一同编入索引,以实现对关键字和向量的混合搜索。而通过将语义理解纳入相关性排名中,也能够改善搜索结果。
举个例子,像ChatGPT这样的新模型属于生成式人工智能的创新范畴。这些模型不仅可以生成文本,还能够管理复杂的人类对话。有些模型甚至可以在多种模式下运行,比如有些模型可以根据用户描述的场景生成符合描述内容的图像。
然而,生成式模型容易造成幻觉,这可能会导致聊天机器人向用户传递错误信息。这时,向量数据库就可以弥补生成式人工智能模型的这一缺陷。它为生成式人工智能聊天机器人提供了外部知识库,确保它们提供的信息是可信赖的。
2.4 向量数据库是如何工作的?
我们都大致了解传统数据库是如何工作的——它们将字符串、数字和其他类型的标量数据存储在行和列中。然而,向量数据库则基于向量操作,因此它的优化和查询方式有着很大的不同。
在传统数据库中,通常我们会查询数据库中数值与我们查询条件完全匹配的行。而在向量数据库中,我们会应用相似度度量来寻找与我们查询条件最相似的向量。
向量数据库采用了一系列不同的算法,这些算法都参与了近似最近邻(ANN)搜索。这些算法通过哈希、量化或基于图的搜索来优化搜索过程。
这些算法被组装成一个流水线,能够快速准确地检索查询向量的邻居。由于向量数据库提供的是近似结果,我们需要权衡的主要是准确性和速度。结果越准确,查询速度就越慢。然而,一个良好的系统可以在几乎完美的准确性下提供超快速的搜索。
以下是向量数据库的常见流程:
向量数据库流程
- 索引: 向量数据库使用诸如 PQ、LSH 或 HNSW 等算法对向量进行索引。这一步将向量映射到数据结构,以加速搜索过程。
- 查询: 向量数据库将索引的查询向量与数据集中的索引向量进行比较,通过特定索引使用的相似性度量来确定最近的邻居。
- 后处理: 在某些情况下,向量数据库从数据集中检索最终的最近邻居,并对其进行后处理以返回最终结果。此步骤可能包括使用不同的相似性度量对最近邻居进行重新排序。
三、腾讯云向量数据库
3.1 什么是腾讯云向量数据库
腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持10亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。
腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、NLP 服务、计算机视觉、智能客服等 AI 领域。
3.2 腾讯云向量数据库优势
腾讯云向量数据库(Tencent Cloud VectorDB)作为一种专门存储和检索向量数据的服务提供给用户, 在高性能、高可用、大规模、低成本、简单易用、稳定可靠等方面体现出显著优势。
为了更加言简意赅,可以直接看我做成的脑图,更加直观的感受腾讯云向量数据库优势:
- 高性能
向量数据库单索引支持10亿级向量数据规模,可支持百万级 QPS 及毫秒级查询延迟。 - 高可用
向量数据库提供多副本高可用特性,其多可用区和三节点的架构可用性可达99.99%,显著提高系统的可靠性和容错性,确保数据库在面临节点故障和负载变化等挑战时仍能正常运行。
大规模
向量数据库架构支持水平扩展,单实例可支持百万级 QPS,轻松满足 AI 场景下的向量存储与检索需求。 - 低成本
只需在管理控制台按照指引,简单操作几个步骤,即可快速创建向量数据库实例,全流程平台托管,无需进行任何安装、部署和运维操作,有效减少机器成本、运维成本和人力成本开销。 - 简单易用
支持丰富的向量检索能力。用户通过 HTTP API 或者 SDK 接口即可快速操作数据库,开发效率高。同时控制台提供了完善的数据管理和监控能力,操作简单便捷。 - 稳定可靠
向量数据库源自腾讯集团自研的向量检索引擎 OLAMA,近40个业务线上稳定运行,日均处理的搜索请求高达千亿次,服务连续性、稳定性有保障。 - Embedding 功能
向量数据库的 Embedding 功能会自动将原始文本进行转换,生成对应的向量数据并插入数据库或进行相似性检索,实现了文本到向量数据的一体化转换,减少了用户的操作步骤,极大降低了使用门槛。
3.3 腾讯云向量数据库现阶段落地项目
当下,腾讯云向量数据库成为腾讯企业内外广泛采用的首选。内部各应用产品纷纷依托腾讯云向量数据库,实现高效数据管理与应用,助力业务发展。外部行业也不例外,大量产品纷纷选择腾讯云向量数据库,充分利用其优势。这种趋势呈现出愈发增长的态势,已经成为当今技术发展中的一大亮点,体现了腾讯云向量数据库在业界的卓越地位。
腾讯云向量数据库现阶段腾讯集团内部 40+业务接入, 1600亿次请求/天; 1000+外部用户接入。
四、腾讯云向量数据库实战(金融信用数据库分析)
金融分析案例(重要)
4.1 前期准备
4.1.1 采购腾讯云向量数据库
在腾讯云产品页面,搜索向量数据库或者直接点击新产品中的向量数据库。
进入到腾讯云向量数据库首页后,点击立即体验:
在进入创建实例页面中,依次选择配置的地域信息,规格等信息。
详细的信息参照下图,如果没有创建的一些配置,可以根据下图的提示进行提前创建。
注意:所申请的免费体验实例,最长使用时间为1个月,1个月到期后会被回收。
4.1.2 登陆腾讯云向量数据库
根据自身情况,开启外网访问权限,如果是生产环境不建议开启,只需要自己使用内网即可,本文为了测试演示,开启了外网访问权限。
开启外网访问权限后,点击实例ID进入详情页面,如下图,点击登录按钮。
进入到向量数据库登录界面,如图需要账号和密码账号默认是root
,密码是向量数据库配置(上图)中的密钥
。
4.1.3 腾讯云向量数据库 SDK 准备
我们以 Python 环境为案例,执行如下命令,可直接安装最新版本。
pip install tcvectordb
执行如下图所示:
4.2 案例数据库开发流程
4.2.1 创建数据库
使用如下的代码进行创建数据库:
import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency# 创建数据库连接对象
client = tcvectordb.VectorDBClient(url='http://lb-*******.ap-guangzhou.tencentclb.com:50000', username='root', key='G283v2GaQRJG3vk******', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)# 创建数据库
db = client.create_database(database_name='t_vectordb_demo_01')print(db.database_name)
4.2.2 创建集合
# 第一步,设计索引
index = Index(FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY),VectorIndex(name='vector', dimension=768, index_type=IndexType.HNSW,metric_type=MetricType.COSINE, params=HNSWParams(m=16, efconstruction=200)),)ebd = Embedding(vector_field='vector', field='text', model=EmbeddingModel.BGE_BASE_ZH)# 第二步:创建 Collection
coll = db.create_collection(name='loan_data_analysis',shard=1,replicas=0,description='this is a collection of test embedding',embedding=ebd,index=index)
print(vars(coll))
4.2.3 导入数据
import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency
from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
from tcvectordb.model.collection import Embedding, UpdateQuery
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency
from tcvectordb.model.document import Document, Filter, SearchParams# # 创建数据库连接对象
client = tcvectordb.VectorDBClient(url='http://lb-******.clb.ap-guangzhou.tencentclb.com:50000', username='root', key='G283v2******', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)# 指定写入原始文本的数据库与集合
db = client.database('t_vectordb_demo_01')
coll = db.collection('loan_data_analysis')# 写入数据,可能存在一定延迟
# 1. 支持动态 Schema,除了 id、text 字段必须写入,可以写入其他任意字段,text 字段为创建集合时,设置的文本字段名
# 2. upsert 会执行覆盖写,若文档id已存在,则新数据会直接覆盖原有数据(删除原有数据,再插入新数据)
# 3. 参数 build_index 为 True,指写入数据同时重新创建索引。
res = coll.upsert(documents=[Document(id='1077501',text="1077501:10+ years",author='RENT',bookName='5000',page=36,funded_amnt=5000,funded_amnt_inv=4975,int_rate=10.65,installment=162.87,grade='B',sub_grade='B2',emp_title='',emp_length='10+ years',home_ownership='RENT'),Document(id='1077430',text="1314167:< 1 year",author='RENT',bookName='2500',page=60,funded_amnt=2500,funded_amnt_inv=2500,int_rate=15.27,installment=59.83,grade='C',sub_grade='C4',emp_title='Ryder',emp_length='< 1 year',home_ownership='RENT')],build_index=True
)
注意:
1. 支持动态 Schema,除了 id、text 字段必须写入,可以写入其他任意字段,text 字段为创建集合时,设置的文本字段名
2. upsert 会执行覆盖写,若文档id已存在,则新数据会直接覆盖原有数据(删除原有数据,再插入新数据)
3. 参数 build_index 为 True,指写入数据同时重新创建索引。
插入测试数据后,我们返回到腾讯云向量数据库中,查看数据如下图所示:
我们可以批量导入下面类似的数据库进入数据库
4.2.3 读取数据
读取数据我们使用的是query的方法功能
基于精确匹配的查询方式,query()
用于精确查找与查询条件完全匹配的向量,具体支持如下功能。
支持根据主键 id(Document ID),搭配自定义的标量字段的 Filter 表达式一并检索。
支持指定查询起始位置 offset 和返回数量 limit,实现数据 SCAN 能力。
# Set filter
filter_param=Filter(Filter.In("text",["year", "years"]))# query
doc_list = coll.query(document_ids=['1077501','1077430'], retrieve_vector=True, filter=filter_param, limit=2, offset=0, output_fields=['text','author'])for doc in doc_list:print(doc)
取出的向量数据如下:
4.2.4 数据分析
将变量转换为其适当的数据类型
某些变量不是其适当的数据类型,需要进行预处理以转换为正确的格式。我们定义了一些函数来帮助自动化这个过程。用于将变量转换为其适当数据类型的函数如下所示。
# 将术语列转换为数字数据类型def term_numeric(df, column):df[column] = pd.to_numeric(df[column].str.replace(' months', ''))term_numeric(data, 'term')#converting emp-length to numeric datatype
def emp_length_convert(df, column):df[column] = df[column].str.replace('\+ years', '')df[column] = df[column].str.replace('< 1 year', str(0))df[column] = df[column].str.replace(' years', '')df[column] = df[column].str.replace(' year', '')df[column] = pd.to_numeric(df[column])df[column].fillna(value = 0, inplace = True)# 预处理日期列def date_columns(df, column):# store current monthtoday_date = pd.to_datetime('2020-08-01')# convert to datetime formatdf[column] = pd.to_datetime(df[column], format = "%b-%y")# calculate the difference in months and add to a new columndf['mths_since_' + column] = round(pd.to_numeric((today_date - df[column]) / np.timedelta64(1, 'M')))# make any resulting -ve values to be equal to the max datedf['mths_since_' + column] = df['mths_since_' + column].apply(lambda x: df['mths_since_' + column].max() if x < 0 else x)# drop the original date columndf.drop(columns = [column], inplace = True)
目标列的预处理
我们数据集中的目标列是贷款状态,其中包含不同的唯一值。这些值将需要转换为二进制。即,对于不良借款人为0,对于良好借款人为1。在我们的案例中,不良借款人的定义是指在我们的目标列中属于以下情况的人员:已冲销,违约,逾期(31-120天),不符合信用政策的状态:已冲销。其余被分类为良好借款人。
# 基于loan_status列创建一个新列,这将是我们的目标变量
data['good_bad'] = np.where(data.loc[:, 'loan_status'].isin(['Charged Off', 'Default', 'Late (31-120 days)','Does not meet the credit policy. Status:Charged Off']), 0, 1)
# Drop the original 'loan_status' column
data.drop(columns = ['loan_status'], inplace = True)
分析获取证据权重(WOE)和信息价值
信用风险模型通常需要是可解释和易于理解的。为了实现这一点,所有独立变量都必须是分类的。由于一些变量是连续的,我们将采用证据权重(Weight of Evidence)的概念。
证据权重将帮助我们将连续变量转换为分类特征。连续变量被分为不同区间,并基于它们的证据权重创建新的变量。此外,信息价值帮助我们确定哪个特征在预测中是有用的。下面列出了独立变量的信息价值。信息价值小于0.02的变量将不会被包含在模型中,因为它们没有预测能力
Information value of term is 0.035478
Information value of int_rate is 0.347724
Information value of grade is 0.281145
Information value of emp_length is 0.007174
Information value of home_ownership is 0.017952
Information value of annual_inc is 0.037998
Information value of verification_status is 0.033377
Information value of pymnt_plan is 0.000309
Information value of purpose is 0.028333
Information value of addr_state is 0.010291
Information value of dti is 0.041026
Information value of delinq_2yrs is 0.001039
Information value of inq_last_6mths is 0.040454
Information value of mths_since_last_delinq is 0.002487
Information value of open_acc is 0.004499
Information value of pub_rec is 0.000504
Information value of revol_util is 0.008858
Information value of initial_list_status is 0.011513
Information value of out_prncp is 0.703375
Information value of total_pymnt is 0.515794
Information value of total_rec_int is 0.011108
Information value of last_pymnt_amnt is 1.491828
我们训练集中目标列的类别标签存在不平衡,正如下面的条形图所示。使用这种不平衡的数据来训练我们的模型会导致其偏向于预测具有大多数标签的类别。为了防止这种情况,我使用了随机过采样来增加目标列中少数类别的观察数量。需要注意的是,这个过程仅在训练数据上执行。
从上述图中,我们可以清晰的看出:对于不良借款人为0,对于良好借款人为1的最终结果。
五、文末总结
这篇文章提供了对数据库分类和腾讯云向量数据库的深入了解。它探讨了向量数据库的重要性以及其在不断变化的需求下的应用。
通过介绍腾讯云向量数据库的优势和实际项目落地情况,文章展示了其在金融信用数据库分析中的实战应用。
这篇文章全面介绍了腾讯云向量数据库的重要性、工作原理以及在实际项目中的应用,为读者提供了深入了解和实际操作的指导。
六、推荐参考文献
AIGC 时代的数据管理 - 向量数据库,扫码即可阅读!
相关文章:

【腾讯云云上实验室】用向量数据库在金融信数据库分析中的实战运用
一、前言 这篇文章将带领读者探索数据库的多样化解决方案及其演进历程,特别关注向量数据库的重要性和在实际项目中的应用。 通过深入剖析腾讯云向量数据库及其在金融信用数据库分析中的实战运用,为读者提供全面而实用的指南,帮助他们理解、…...

2015年五一杯数学建模A题不确定性条件下的最优路径问题解题全过程文档及程序
2015年五一杯数学建模 A题 不确定性条件下的最优路径问题 原题再现 目前,交通拥挤和事故正越来越严重的困扰着城市交通。随着我国交通运输事业的迅速发展,交通“拥塞”已经成为很多城市的“痼疾”。在复杂的交通环境下,如何寻找一条可靠、快…...

5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)
一、说明: 在进行项目开发过程中,会涉及子项目/子模块的问题 Qt中使用TEMPLATE subdirs添加多个子项目;子项目可以单独编译生成可执行文件(exe)或者动态链接库(dll)等,供其他模块…...

Facebook的特点优势
Facebook作为全球最大的社交媒体平台之一,同时也是最受欢迎的社交网站之一,Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户,覆盖了几乎所有国家和地区。这使得人们…...

Spring框架体系及Spring IOC思想
目录 Spring简介Spring体系结构SpringIOC控制反转思想自定义对象容器Spring实现IOCSpring容器类型容器接口容器实现类对象的创建方式使用构造方法使用工厂类的方法使用工厂类的静态方法对象的创建策略对象的销毁时机生命周期方法获取Bean对象的方式通过id/name获取通过类型获取…...
WT588F02B-8S语音芯片:16位DSP技术引领个性化功能产品新时代
随着科技的快速发展,语音芯片作为人机交互的核心组件,在各个领域的应用越来越广泛。唯创知音推出的WT588F02B-8S语音芯片,以其强大的16位DSP技术和丰富的内置资源,正成为行业内的翘楚。 首先,唯创知音WT588F02B-8S是一…...

数字逻辑电路基础-时序逻辑电路之移位寄存器
文章目录 一、移位寄存器定义二、verilog源码三、仿真结果 一、移位寄存器定义 移位寄存器定义 A shift register is a type of digital circuit using a cascade of flip flops where the output of one flip-flop is connected to the input of the next. 移位寄存器是一种将…...

DEM分析
一、实验名称: DEM分析 二、实验目的: 通过本实验练习,掌握DEM的建立与应用基本方法。 三、实验内容和要求: 实验内容: 利用ARCGIS软件相关分析工具及实验数据,创建DEM,并计算相应坡度的区…...

全面探讨HTTP协议从0.9到3.0版本的发展和特点
前言: 最近的几场面试都问到了http的相关知识点,博主在此结合书籍和网上资料做下总结。本篇文章讲收录到秋招专题,该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮…...

中通快递查询入口,根据物流更新量筛选出需要的单号记录
批量中通快递单号的物流信息,根据物流更新量将需要的单号记录筛选出来。 所需工具: 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主…...

Arraylist案例
Arraylist是使用最频繁的一个集合,它与数组类似,不同之处在于它可以动态改变长度,不够了可以扩容。 案例: 我的思考: 首先多个菜品信息可以用Arraylist 来存储,那我们需要再创建一个菜品类Food࿰…...
『heqingchun-Ubuntu系统+x86架构+配置编译安装使用yolov5-6.0+带有TensorRT硬件加速+C++部署』
Ubuntu系统x86架构配置编译安装使用yolov5-6.0带有TensorRT硬件加速C部署 一、准备文件 1.yolov5-6.0.zip 官网下载 网址: https://github.com/ultralytics/yolov5/tree/v6.0操作: 点击"Code"下的"Download ZIP" 下载得到yolov5…...
优秀的员工成为公司的管理者之后,为何表现平庸?因为他们缺乏这些思维
在企业的实践中,我们发现平时能力最强的员工,在被提拔到管理层之后就慢慢变得平庸了,再也不是以前那个无所不能的“企业能人”了,甚至在一些事情的处理上还会有些笨拙。面对这种情况,我们一定会感觉很疑惑,…...

MySQL简单介绍
简单了解MySQL MySQL语句分类 SQL语句分类 DDL:数据定义语句 create表,库.….] DML:数据操作语句 [增加insert,修改 update,删除delete] DQL:数据查询语句 [select] DCL:数据控制语句 …...

【开源】基于JAVA的天然气工程业务管理系统
项目编号: S 021 ,文末获取源码。 \color{red}{项目编号:S021,文末获取源码。} 项目编号:S021,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…...

虚幻学习笔记—点击场景3D物体的两种处理方式
一、前言 本文使用的虚幻引擎为5.3.2,两种方式分别为:点击根物体和精准点击目标物体。 二、实现 2.1、玩家控制器中勾选鼠标点击事件:这一步很重要,如图2.1.1所示:在自定义玩家控制器中勾 图2.1.1 选该项,…...

AIGC|LangChain新手入门指南,5分钟速读版!
如果你用大语言模型来构建AI应用,那你一定不可能绕过LangChain,LangChain是现在最热门的AI应用框架之一,去年年底才刚刚发布,它在github上已经有了4.6万颗星的点赞了,在github社区上,每天都有众多大佬,用它…...

探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示
💐作者:insist-- 💐个人主页:insist-- 的个人主页 理想主义的花,最终会盛开在浪漫主义的土壤里,我们的热情永远不会熄灭,在现实平凡中,我们终将上岸,阳光万里 ❤️欢迎点…...
Centos 7 在线安装(RPM) PostgreSQL 14 15 16
目录 一、官网下载地址二、检查系统是否安装其他版本PostgreSQL数据库三、安装数据库四、配置数据库(默认方式一)4.1初始化用户密码4.2修改postgresql.conf文件4.3修改pg_hba.conf文件五、修改默认存储路径六、配置防火墙七、生产环境优化(待完善)八、启用SSL加密(待验证)九…...

如何在gitlab上使用hooks
参考链接:gitlab git hooks 1. Git Hook 介绍 与许多其他版本控制系统一样,Git 有一种方法可以在发生某些重要操作时,触发自定义脚本,即 Git Hook(Git 钩子)。 当我们初始化一个项目之后,.git…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...