让chatGPT当我的老师如何? 通过和chatGPT交互式学习,了解在ES中,一条JSON数据是如何写到磁盘上的

news2024/11/24 20:30:51

  最近一直有一个问题,如鲠在喉。争取早一天解决,早一天踏踏实实的睡觉。

  问题是:在ES中,一条JSON数据是如何写入到磁盘上的?

  如何解决这个问题?我想到了chatGPT,还有lucene的学习资料。这篇文章,我打算用 QA的形式来分享这次学习探索过程,看看能否驯服chatGPT当我的老师。

  文章我copy了我和chatGPT的聊天记录。

  最后的结果还是挺不错的,虽然也有一些问题,但是大多数是对的。并且chatGPT也给列出来了ES中这部分源码的实现位置,只需要再花时间看看源码,答案就有了。

Q1.1 在ES中,一条JSON数据是如何写入到磁盘上的,请结合lucene底层来讲讲

 其中引用起来的就是chatGPT告诉我的答案。chatGPT是一个很厉害的科学家,同时又很擅长说谎话。所以和chatGPT交流学习,最大的困难点,就是识别他说的谎话。

在Elasticsearch中,一条JSON数据是被索引到Lucene底层中的,Lucene底层是Elasticsearch用来存储和检索文档的核心引擎。

当一条JSON数据被索引到Elasticsearch中时,它首先会被转换为一个Lucene文档(Document)。Lucene文档是一个由多个字段组成的数据结构,每个字段都包含一个名称和一个值。在Elasticsearch中,每个JSON对象的属性都被映射为一个Lucene字段,其值则被存储在相应的字段中。

一旦JSON数据被转换为Lucene文档,它就可以被写入到磁盘上的Lucene索引文件中。Lucene索引文件是一个由多个段(Segment)组成的数据结构,每个段包含一部分文档和相关的元数据信息。当文档被写入到索引文件时,它会被分配到一个或多个段中,这些段可以是新建的,也可以是已存在的。

在Elasticsearch中,写入到磁盘上的数据是由分片(Shard)组成的。每个分片都是一个独立的Lucene索引,它可以存储一部分文档数据和元数据信息。当一条JSON数据被写入到Elasticsearch中时,它会被分配到一个或多个分片中,这些分片可以分布在不同的节点上,从而实现数据的分布式存储和检索。

总的来说,在Elasticsearch中,一条JSON数据是被转换为一个Lucene文档,并写入到分片的Lucene索引文件中的。这个过程涉及到很多细节和优化,Elasticsearch会尽可能地利用Lucene底层的特性来提高性能和可扩展性。

 第一个问题,看起来没有什么问题,因为只是笼统的回答一下。但是不是很详细,chatGPT也说了,涉及到了很多的细节和优化。那就接着继续问问。

 Q1.2这个过程涉及到哪些细节和什么优化

将一条JSON数据写入到磁盘上的Lucene索引文件中,涉及到很多细节和优化,其中一些关键点包括:

  1. 映射:将JSON数据映射到Lucene文档中,这包括对每个属性进行分词、索引和存储的处理。Elasticsearch会根据字段的类型和映射设置,自动进行数据转换和处理,以便正确地存储和检索数据。

  2. 索引:将Lucene文档写入到分片的索引文件中。这包括对文档进行分析、建立倒排索引、写入磁盘等一系列操作。Elasticsearch会利用Lucene底层的优化机制,如内存缓存、合并段、索引压缩等,以提高写入性能和减少磁盘空间占用。

  3. 分片:将索引数据分配到多个分片中,以实现数据的分布式存储和检索。Elasticsearch会根据集群配置和数据负载,自动进行分片和副本的分配和调整,以实现数据的高可用性和性能优化。

  4. 事务:将数据写入到索引文件时,需要保证数据的一致性和可靠性。Elasticsearch会利用Lucene底层的事务机制,如基于文件锁的事务管理和崩溃恢复机制,以确保数据写入的原子性和可靠性。

  5. 缓存:为了提高查询性能和减少磁盘I/O,Elasticsearch会利用Lucene底层的缓存机制,如过滤器缓存、字段数据缓存、近实时搜索等,以减少重复计算和磁盘访问。

总的来说,Elasticsearch通过利用Lucene底层的优化机制和特性,以及自身的分布式架构和算法,实现了高性能、可扩展和可靠的数据存储和检索。同时,Elasticsearch还提供了丰富的API和工具,方便用户进行数据操作和管理。

  这里的回答,看起来也都还行。 但还是不是我想要的答案。接下来我想问问他源码。

Q1.3还是不够详细,请结合源码跟我讲讲

Elasticsearch的源码实现涉及到多个模块和组件,其中核心部分是基于Lucene底层实现的。在这里,我会结合源码解析一下Elasticsearch将一条JSON数据写入到磁盘上的过程。

  • 映射:在Elasticsearch中,将JSON数据映射为Lucene文档是通过Mapping和Analyzer两个组件实现的。Mapping定义了字段的数据类型、分析器、存储方式等属性,Analyzer则负责对文本进行分词、过滤、归一化等处理。

在源码中,Mapping的定义是通过IndicesModule组件实现的,而Analyzer则是通过AnalysisModule和Analysis类实现的。当一条JSON数据被索引时,Elasticsearch会根据Mapping和Analyzer的定义,将数据转换为一个Lucene文档。

  • 索引:将Lucene文档写入到分片的索引文件中,是通过IndexWriter和IndexShard类实现的。IndexWriter是Lucene底层的核心组件,它负责对文档进行分析、建立倒排索引、写入磁盘等操作。

在Elasticsearch中,每个分片都有一个对应的IndexShard对象,它封装了Lucene的IndexWriter和IndexReader组件,以及相关的元数据信息。当一条JSON数据被写入到Elasticsearch时,它会被分配到一个或多个分片中,然后通过IndexShard的Index方法将文档写入到索引文件中。

  • 分片:将索引数据分配到多个分片中,是通过ClusterService和ShardRouting类实现的。ClusterService是Elasticsearch的集群管理组件,它负责管理集群的状态和拓扑结构,以及处理分片的分配和调度。

当一条JSON数据被写入到Elasticsearch时,它首先会被发送到一个主节点上进行处理,然后根据集群配置和数据负载,ClusterService会计算出将数据分配到哪些分片中。这个过程涉及到一些复杂的算法和策略,如哈希分片、一致性哈希、负载均衡等。

  • 事务:将数据写入到索引文件时,需要保证数据的一致性和可靠性。在Lucene底层,这个问题是通过两个机制来解决的:事务日志(Transaction Log)和段合并(Segment Merge)。

在Elasticsearch中,Transaction Log是通过Translog类实现的,它负责记录文档的变化操作,以便在崩溃或重启时进行恢复。Segment Merge则是通过IndexWriter和IndexReader组件实现的,它负责将多个小段合并成一个大段,以减少磁盘空间占用和提高查询性能。

  • 刷新和提交:将数据写入到索引文件后,需要将数据刷新到内存缓存和磁盘上。在Elasticsearch中,这个过程是通过IndexWriter和IndexShard类的flush方法实现的。

IndexWriter的flush方法会将内存缓存中的数据写入到磁盘上,并生成一个新的段(Segment),同时将事务日志清空。IndexShard的flush方法会将IndexWriter的缓存和元数据信息同步到内存中,并更新分片的状态信息。

当一批数据被写入到Elasticsearch后,它们并不会立即生效,直到进行了提交(Commit)操作。在Elasticsearch中,提交是通过IndexWriter的commit方法实现的,它会将所有未提交的数据刷新到磁盘上,并更新分片的元数据信息。

  • 性能优化:在将数据写入到Elasticsearch时,有一些性能优化技巧可以提高写入速度和可靠性。其中一些技巧包括:
    1. 批量写入:将多条数据合并成一个批次,一次性写入到Elasticsearch中,可以减少网络开销和提高写入性能。
    2. 索引分片:将索引数据分配到多个分片中,可以提高并发写入能力和水平扩展性。
    3. 内存管理:合理地管理内存缓存和JVM堆内存,可以避免OOM和GC问题,提高写入性能和稳定性。
    4. 硬件优化:选择高性能的硬件设备和存储介质,可以提高磁盘IO速度和可靠性。

总体来说,将一条JSON数据写入到Elasticsearch中,涉及到多个组件和技术细节,包括数据映射、索引写入、分片管理、事务处理、数据刷新和性能优化等方面。理解这些细节和技术原理,可以帮助我们更好地理解和使用Elasticsearch,并在实际应用中提高性能和可靠性。

   回答行云流水,不管对不对,先炸一下它。

Q1.4 你不能骗我,你要根据es官网和lucene官网回答我,最好还能结合源码!

  这次回答要比上边更好一点了。这里chatGPT不仅讲了在es中的操作步骤,而且还讲了一下在lucene中的过程。这一次的答案已经趋向于我想要的答案了。

非常抱歉,我的回答并不够详细和准确。以下是根据Elasticsearch和Lucene官方文档以及源码的详细解释。

在Elasticsearch中,一条JSON数据写入到磁盘的过程可以分为以下几个步骤:

  1. 数据映射:将JSON数据转换成Lucene文档(Document),并根据索引的映射规则(Mapping)将文档字段映射到Lucene字段(Field)中。这个过程是由IndexRequest类和IndexService类实现的。

  2. 索引写入:将文档写入到分片(Shard)的内存缓存中,同时将操作记录到事务日志(Translog)中。这个过程是由IndexShard类和Translog类实现的。

  3. 文档合并:将多个内存缓存中的文档合并成一个文档列表,并对文档列表进行排序和去重。这个过程是由InMemoryMerger类实现的。

  4. 索引合并:将合并后的文档列表写入到磁盘上的索引文件(Index File)中,并更新分片的元数据信息。这个过程是由IndexWriter类和Segment类实现的。

  5. 刷新和提交:将数据写入到索引文件后,需要将数据刷新到内存缓存和磁盘上。在Elasticsearch中,这个过程是通过IndexWriter和IndexShard类的flush方法实现的。当一批数据被写入到Elasticsearch后,它们并不会立即生效,直到进行了提交(Commit)操作。在Elasticsearch中,提交是通过IndexWriter的commit方法实现的,它会将所有未提交的数据刷新到磁盘上,并更新分片的元数据信息。

在Lucene底层实现上,索引写入的过程包括以下步骤:

  1. 文档分析:将文档内容进行分析和处理,生成一组词汇单元(Term)。

  2. 倒排索引写入:将文档的词汇单元写入到倒排索引(Inverted Index)中。倒排索引是一个数据结构,用于记录每个词汇单元出现在哪些文档中,并存储一些额外的统计信息(如出现次数、位置等)。

  3. 磁盘写入:将倒排索引写入到磁盘上的索引文件中。索引文件是一个二进制文件,用于持久化存储倒排索引和其他元数据信息。

  4. 内存管理:对内存缓存中的倒排索引进行管理,包括内存回收、内存合并和内存清理等操作。

  5. 索引合并:将多个磁盘索引文件合并成一个新的索引文件,并进行一些优化操作,如合并多个倒排索引、去重、压缩等。这个过程是由IndexWriter类的merge方法和MergePolicy类实现的。

  6. 索引优化:对索引文件进行优化,如减少文件数量、优化查询性能、减少索引大小等。这个过程是由IndexWriter类的optimize方法和MergePolicy类实现的。

  7. 在Lucene中,还有一些与索引写入相关的细节和优化,如:

    1. 内存缓存管理:Lucene会将一部分倒排索引存储在内存中,以加快索引写入和查询速度。但是,内存缓存的大小是有限制的,一旦缓存满了,就需要将其中的索引数据写入到磁盘上。

    2. 总之,索引写入是Elasticsearch和Lucene的核心功能之一,它涉及到多个组件和细节,包括数据映射、索引写入、索引合并、内存管理、磁盘写入优化等。通过对这些细节和优化进行深入理解,可以帮助我们更好地使用和优化Elasticsearch和Lucene。

    3. 磁盘写入优化:Lucene使用一些技术来优化磁盘写入性能,如缓存写入数据、使用多线程写入等。

    4. 索引压缩:Lucene会对索引文件进行压缩,以减少索引文件的大小,从而提高查询性能。索引压缩是在索引合并和优化过程中完成的。

    5. 数据结构优化:Lucene使用一些高效的数据结构来存储倒排索引和其他元数据信息,如FST、DFA、IntBlockPool等。这些数据结构可以显著提高索引写入和查询的性能。

Q1.5  请再帮我精确地找到源码的位置 es使用7.11.1版本最好

amazing!到这里,我觉得惊呆了,以前看源码的时候,可没有这么轻松。需要看好久才能捋出来这么一个列表。大概根据chatGPT给列出来的源码位置,点开看了看 ,还可以(还没有都点开验证)。 但是其中第四条 chatGPT说 “FielddataIndexFieldData类实现了倒排索引的存储和查询功能” 这个肯定是不对的。这部分肯定是lucene实现的。

  1. 数据映射:数据映射的相关代码位于 org.elasticsearch.index.mapper 包下。

  2. 索引写入:索引写入的相关代码位于 org.elasticsearch.index.engine 包下。其中,IndexWriter类位于 org.elasticsearch.index.engine.Engine 文件中。

  3. 倒排索引:倒排索引的相关代码位于 org.elasticsearch.index.fielddata 包下。其中,FielddataIndexFieldData类实现了倒排索引的存储和查询功能,位于 org.elasticsearch.index.fielddata.IndexFieldData.java 文件中。

  4. 索引合并:索引合并的相关代码位于 org.elasticsearch.index.merge 包下。其中,IndexWriter类的merge方法位于 org.elasticsearch.index.engine.Engine 文件中。

  5. 索引优化:索引优化的相关代码位于 org.elasticsearch.index.engine 包下。其中,IndexWriter类的optimize方法位于 org.elasticsearch.index.engine.Engine 文件中。

其他与索引写入相关的细节和优化的代码位于不同的包和类中,具体位置如下:

  1. 内存缓存管理:内存缓存管理的相关代码位于 org.elasticsearch.index.shard 包下。其中,IndexShard类负责管理内存缓存,位于 org.elasticsearch.index.shard.IndexShard 文件中。

  2. 磁盘写入优化:磁盘写入优化的相关代码位于 org.elasticsearch.index.translog 包下。其中,Translog类实现了磁盘写入的缓存和优化功能,位于 org.elasticsearch.index.translog.Translog.java 文件中。

  3. 索引压缩:索引压缩的相关代码位于 org.elasticsearch.index.codec 包下。其中,Lucene索引压缩的实现位于 org.elasticsearch.index.codec.CodecService 类中,而Elasticsearch自身的索引压缩实现位于 org.elasticsearch.index.codec.PostingsFormat 类中。

  4. 数据结构优化:Lucene使用的高效数据结构的相关代码位于 org.apache.lucene.util 包下,其中FST的实现位于 org.apache.lucene.util.fst 包下,DFA的实现位于 org.apache.lucene.util.automaton 包下,IntBlockPool的实现位于 org.apache.lucene.util.packed 包下。Elasticsearch自身使用的高效数据结构的相关代码位于 org.elasticsearch.common.util 包下。

  5. 索引刷新:索引刷新的相关代码位于 org.elasticsearch.index.engine 包下。其中,IndexWriter类的flush方法位于 org.elasticsearch.index.engine.Engine 文件中。

  6. 索引删除:索引删除的相关代码位于 org.elasticsearch.index.engine 包下。其中,IndexWriter类的delete方法和deleteByQuery方法位于 org.elasticsearch.index.engine.Engine 文件中。

  7. 索引恢复:索引恢复的相关代码位于 org.elasticsearch.index.engine 包下。其中,IndexWriter类的recovery方法位于 org.elasticsearch.index.engine.Engine 文件中。

  8. 索引分片:索引分片的相关代码位于 org.elasticsearch.index.shard 包下。其中,IndexShard类负责管理和操作索引分片,位于 org.elasticsearch.index.shard.IndexShard 文件中。

  9. 数据写入确认:数据写入确认的相关代码位于 org.elasticsearch.index.translog 包下。其中,Translog类实现了数据写入确认的功能,位于 org.elasticsearch.index.translog.Translog.java 文件中。

  10. 索引同步:索引同步的相关代码位于 org.elasticsearch.index.engine 包下。其中,IndexWriter类的sync方法位于 org.elasticsearch.index.engine.Engine 文件中。

  11. 索引缓存:索引缓存的相关代码位于 org.elasticsearch.index.cache 包下。其中,IndexCache类负责管理和操作索引缓存,位于 org.elasticsearch.index.cache.IndexCache.java 文件中。

  12. 索引快照:索引快照的相关代码位于 org.elasticsearch.index.snapshots 包下。其中,IndexShardSnapshot类实现了索引快照的存储和恢复功能,位于 org.elasticsearch.index.snapshots.IndexShardSnapshot.java 文件中。

  13. 索引复制:索引复制的相关代码位于 org.elasticsearch.index.shard 包下。其中,IndexShard类实现了索引复制的功能,位于 org.elasticsearch.index.shard.IndexShard.java 文件中。

  14. 索引压缩:索引压缩的相关代码位于 org.elasticsearch.index.codec 包下。其中,PostingsFormat类和DocValuesFormat类负责控制索引压缩的方式和格式,位于 org.elasticsearch.index.codec 文件夹中。

  15. 索引合并:索引合并的相关代码位于 org.elasticsearch.index.merge 包下。其中,MergePolicy类和MergeScheduler类负责控制索引合并的策略和调度,位于 org.elasticsearch.index.merge 文件夹中。

  16. 索引优化:索引优化的相关代码位于 org.elasticsearch.index.engine 包下。其中,IndexWriter类的forceMerge方法位于 org.elasticsearch.index.engine.Engine 文件中。

  17. 索引自动切分:索引自动切分的相关代码位于 org.elasticsearch.index 包下。其中,IndexService类负责控制索引的自动切分,位于 org.elasticsearch.index.IndexService 文件中。

  18. 索引查询:索引查询的相关代码位于 org.elasticsearch.index.query 包下。其中,Query类和QueryBuilder类负责控制索引查询的方式和格式,位于 org.elasticsearch.index.query 文件夹中。

  19. 索引统计:索引统计的相关代码位于 org.elasticsearch.index.fielddata 包下。其中,FieldDataType类和FieldDataStats类负责控制索引统计的方式和格式,位于 org.elasticsearch.index.fielddata 文件夹中。

  20. 索引分析:索引分析的相关代码位于 org.elasticsearch.index.analysis 包下。其中,Analyzer类和TokenFilter类负责控制索引分析的方式和格式,位于 org.elasticsearch.index.analysis 文件夹中。

  接下来再用一个问题来验证。

Q 1.6  我有个疑问,你确定 FielddataIndexFieldData类实现了倒排索引的存储和查询功能吗

非常抱歉,我在之前的回答中有误,FielddataIndexFieldData 类并没有实现倒排索引的存储和查询功能。

FielddataIndexFieldData 类是 Elasticsearch 中用于在内存中存储分段的字段数据的一个数据结构,通常用于聚合、排序和脚本等功能的计算。它不是存储实际的倒排索引,而是对已经建立好的倒排索引数据进行了提取和封装,方便后续的处理和计算。

实际上,倒排索引是在建立索引时创建的,主要由 Lucene 库实现,而不是 Elasticsearch 本身。Elasticsearch 的索引底层是基于 Lucene 的,它使用了 Lucene 的倒排索引机制来存储和查询数据。Lucene 的倒排索引主要包括 Term、Document 和 Field 等概念,可以通过 IndexReader、IndexWriter、TermQuery、BooleanQuery 等 Lucene 类进行索引的存储和查询操作。

因此,如果您需要深入了解 Elasticsearch 中倒排索引的实现和细节,建议参考 Lucene 相关的文档和资料。

Q1.7 那你检查一下上边说的源码的位置,还有没有错的了

 于是chatGPT又列出和倒排索引相关的源码了。

非常抱歉之前的回答中有误,FielddataIndexFieldData 类并没有实现倒排索引的存储和查询功能。

以下是 Elasticsearch 7.11.1 版本中倒排索引存储和查询的相关源代码位置:

  • 倒排索引存储

在 Elasticsearch 中,倒排索引是在建立索引时创建的,主要由 Lucene 库实现。在 Elasticsearch 的源代码中,建立索引的主要逻辑位于 org.elasticsearch.index.IndexService 类中,具体实现可以参考 org.elasticsearch.index.engine.InternalEngine 类的 IndexWriter 内部类。倒排索引数据存储在磁盘上,位于索引目录下的 segments_N 文件中,其中 N 表示索引分段编号。

  • 倒排索引查询

在 Elasticsearch 中,查询请求通过各种查询语句和过滤器进行构建,这些查询语句和过滤器最终会转换为 Lucene 的 Query 和 Filter 对象,然后通过 org.elasticsearch.index.search.SearchService 类的 search 方法进行查询。在 SearchService 类中,使用 Lucene 的 IndexSearcher 对象对索引进行搜索,具体实现可以参考 org.elasticsearch.index.search.DefaultSearchContext 类和 org.elasticsearch.search.SearchHit 类。

对于搜索结果的排序和分页,Elasticsearch 使用了 Lucene 的 ScoreDoc 和 TopDocs 对象,这些对象包含了查询结果的相关性分数和文档 ID 等信息。在 Elasticsearch 的源代码中,相关性分数的计算和排序逻辑可以参考 org.elasticsearch.search.SearchHits 类的 sortgetAt 方法。分页逻辑可以参考 org.elasticsearch.search.SearchHit 类的 shardid 字段。

在 Elasticsearch 中,查询请求可以分为两种类型:分片查询和全局查询。分片查询是指查询请求只在单个分片上进行查询,并返回查询结果,全局查询是指查询请求在所有分片上进行查询,并返回聚合的查询结果。

对于分片查询,每个分片会使用 Lucene 的 IndexSearcher 对象进行查询,并返回查询结果。在 Elasticsearch 的源代码中,具体实现可以参考 org.elasticsearch.search.query.QueryPhase 类和 org.elasticsearch.search.fetch.subphase.DocIdSearchFetchSubPhase 类。QueryPhase 类是分片查询的主要逻辑实现类,它使用 Lucene 的 QueryParser 和 QueryRewriteChain 等对象对查询语句进行解析和重写,然后使用 Lucene 的 IndexSearcher 对象对分片上的索引进行查询。DocIdSearchFetchSubPhase 类则是对查询结果进行文档 ID 提取和转换的实现类。

对于全局查询,Elasticsearch 会将查询请求发送到所有的分片上,并在所有分片上进行查询。查询结果会通过 org.elasticsearch.action.search.SearchPhaseController 类进行合并和排序,并返回给客户端。具体实现可以参考 org.elasticsearch.action.search.TransportSearchAction 类和 org.elasticsearch.search.fetch.subphase.HighlightPhase 类。TransportSearchAction 类是全局查询的主要逻辑实现类,它负责将查询请求发送到所有分片上,并通过 SearchPhaseController 类进行查询结果的合并和排序。HighlightPhase 类则是对查询结果进行高亮处理的实现类。

总之,倒排索引是 Elasticsearch 和 Lucene 中非常重要的数据结构,它可以大大提高搜索性能和查询效率。在 Elasticsearch 中,倒排索引的存储和查询主要依赖于 Lucene 库的实现,同时也涉及到大量的优化和改进,以满足不同的查询需求和性能要求。

最后chatGPT说,让我去看看源码。并可以参与开发和贡献代码。 不得不说,还是chatGPT懂我。

如果您想了解更多关于 Elasticsearch 的源码位置和细节,请参考以下官方文档和 GitHub 仓库:

  1. Elasticsearch 官方文档:Elasticsearch Guide [8.7] | Elastic

  2. Elasticsearch GitHub 仓库:GitHub - elastic/elasticsearch: Free and Open, Distributed, RESTful Search Engine

在官方文档中,您可以找到详细的 Elasticsearch 使用文档和参考手册,以及各个版本的发行说明和更新日志。

在 GitHub 仓库中,您可以找到 Elasticsearch 的完整源代码,并可以参与开发和贡献代码。

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

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

相关文章

港科夜闻|香港科大(广州)创邻图数据联合实验室正式成立

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大(广州)创邻图数据联合实验室正式成立。未来,香港科大(广州)与「创邻科技」双方将围绕万亿级大图神经网络计算框架、海量数据的时序图处理、分布式原生图数据库事务及性能优化等前沿图技术领域研究展开深…

Cocos Creator的Hello World

0、文档 Cocos官网文档 1、下载 访问cocos官网下载Cocos Dashboard 安装时选项安装 Visual Studio 2017可以不勾选 注意:Cocos Dashboard的快捷方式文件名为CocosDashboard.exe,不要误认为是安装文件 2、注册、登录 注册/登录cocos网址 3、Cocos D…

深度学习之CD数据集创建

深度学习之数据集创建1. 原始文件相关文件路径2. 数据集创建2.1 数据格式一2.2 数据格式二1. 原始文件相关文件路径 原始路径 对于label图片文件,通道需要为单通道,如果不是单通道,训练数据会报错 报错信息例如:ValueError: Mask…

自然语言处理(八):Lexical Semantics

目录 1. Sentiment Analysis 2. Lexical Database 2.1 What is Lexical Database 2.2 Definitions 2.3 Meaning Through Dictionary 2.4 WordNet 2.5 Synsets 2.6 Hypernymy Chain 3. Word Similarity 3.1 Word Similarity with Paths 3.2 超越路径长度 3.3 Abstra…

波形失真总结

失真是输入信号与输出信号在幅度比例关系、相位关系及波形形状产生变化的现象。音频功放的失真分为电失真和声失真两大类。电失真是由电路引起的,声失真是由还音器件扬声器引起的。电失真的类型有:谐波失真、互调失真、瞬态失真。声失真主要是交流接口失…

idea使用之 单词拼写检查设置 分级管理

前言 idea的智能提示使用起来非常顺手, 拼接检查也是其中一项, 有些字段什么的, 不小心将单词的字母顺序写错了, idea的拼接检查就会提示(前提是字段命名规范,并且乱序之后的不再是一个具有意义的单词), 如此一来, 就能规避很多粗心大意的错误. 但是呢, 有些时候,项目中有些自…

用Claude和Stable Diffusion绘制《武松打虎》

绘制四大名著的经典画面 现在最火爆的AI,分为两类,一个是文本生成,一个是图片生成。如果让这两种结合到一起来,会是什么样的效果的。 这样是不是可能帮我们绘制很多场景下的图片,比如四大名著,帮我们的四…

Numpy基础用法

Numpy 【Numerical Python】是一个开源的Python科学计算库,用于快速处理任意维度的数组。Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。Numpy使用ndarray对象来处理多维数组,该对象是一个快…

【项目分析】基于工艺融合的数控编程方法的设计与实现

系列综述: 💞目的:本系列是个人整理为了秋招项目的,按照面试常问及项目核心点整理 🥰来源:该项目源于数控系统迭代的实验项目 🤭结语:如果有帮到你的地方,就点个赞和关注…

新版 Spring Security 配置的变化

进入到 SpringBoot2.7 时代,有小伙伴发现有一个常用的类忽然过期了: 在 Spring Security 时代,这个类可太重要了。过期的类当然可以继续使用,但是你要是决定别扭,只需要稍微看一下注释,基本上就明白该怎么玩…

机器视觉公司,在玩一局玩不起的游戏

导语 有个著名咨询公司曾经预测过:未来只有两种公司,是人工智能的和不赚钱的。 它可能没想到,还有第三种——不赚钱的AI公司。 去年我们报道过“正在消失的机器视觉公司”,昔日的“AI 四小龙”( 商汤、旷视、云从、依图…

大数据 | HBase基本工作原理

前文回顾:MapReduce基本原理 目录 📚HBase基本介绍 🐇HBase的设计目标和功能特点 🐇HBase在Hadoop中的生态环境 📚HBase的数据模型 🐇逻辑数据模型 🐇物理存储格式 📚HBase基…

rust网络编程以及unsafe模块

网络层目前 IPv4 和 IPv6 分庭抗礼,IPv6 还未完全对 IPv4 取而代之;传输层除了对延迟非常敏感的应用(比如游戏quic协议),绝大多数应用都使用 TCP;而在应用层,对用户友好,且对防火墙友…

PageRank算法介绍

互联网上有数百亿个网页,可以分为这么几类:不含有用信息的,比如垃圾邮件;少数人比较感兴趣的,但范围不是很广的,比如个人博客、婚礼公告或家庭像册;很多人感兴趣的并且十分有用的,比…

基于DBN神经网络的语音分类识别

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的语音分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN算法应用于语音分类 DBN神…

排污口漂浮物监测系统 yolov5

排污口漂浮物监测系统通过YOLOV5网络模型技术,排污口漂浮物监测算法模型对河道两岸各处排污口进行7*24小时不间断实时监测,当监测到河道两岸的排污口违规乱排乱放时,不需人为干预系统立即抓拍存档告警。我们选择当下YOLO卷积神经网络YOLOv5来…

实现数字化转型升级,快速开发平台流辰信息来助力!

在如今迅猛发展的年代里,科技的力量是伟大的,可以让老百姓的生活变得丰富多彩,也可以让各行各业的企业实现办公自动化,朝着数字化转型升级,快速提升办公协作效率。快速开发平台流辰信息作为一家低代码平台服务商&#…

(顺序栈)有效括号序列

文章目录前言:问题描述:问题解析:代码实现:总结:前言: 此篇是针对顺序栈的经典练习题。 问题描述: 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘…

iOS / iPadOS 15.7.4发布安全更新 旧版iPhone和ipad无法升级系统解决方法

苹果于昨日面向无法升级到 iOS / iPadOS 16 的旧款 iPhone 和 iPad,发布了 iOS / iPadOS 15.7.4 更新。本次更新并未引入新的功能,而是重点修复了存在于 WebKit 的两个“关键”漏洞。 iOS / iPadOS 15.7.4发布安全更新: 目前已经有充足的证据…

adb基本操作操作

Mumu模拟器 进入终端 cd C:\Program Files\Netease\MuMuPlayer-12.0\shell 获取root权限 adb root 连接手机 adb connect 127.0.0.1:7555 adb shell 查看连接多少台设备 adb devices 安装程序apk adb install C:\Android\CalcTest.apk adb install -r C:\Android\CalcT…