首页 > 其他分享 >Solr 高性能搜索实践:优化和调参指南

Solr 高性能搜索实践:优化和调参指南

时间:2023-12-27 10:01:55浏览次数:40  
标签:调参 查询 lucene 高性能 import apache org Solr


1.背景介绍

Solr(The Apache Solr Project)是一个开源的、基于 Java 的搜索引擎,由 Apache 软件基金会支持。Solr 通常用于实现高性能的、可扩展的、实时的搜索功能,并且具有强大的扩展功能,可以满足各种不同的搜索需求。

Solr 的核心功能包括文本分析、索引、搜索和查询。文本分析是将文本转换为搜索引擎可以理解和处理的格式,即索引。索引是搜索引擎存储和组织文档的数据结构。搜索是查询请求的处理过程,查询请求是用户输入的搜索关键字。

Solr 的优势包括:

  1. 高性能:Solr 使用 Lucene 库进行文本分析和搜索,Lucene 是一个高性能的、可扩展的搜索引擎库。Solr 可以处理大量数据和高并发请求,提供实时搜索功能。
  2. 可扩展:Solr 可以通过分布式搜索和负载均衡来扩展,实现水平扩展。这意味着 Solr 可以在多个服务器上运行,共同处理搜索请求,提高搜索性能。
  3. 实时搜索:Solr 支持实时搜索,即在数据发生变化时立即更新搜索结果。这使得 Solr 可以用于实时应用,如社交网络、新闻网站等。
  4. 强大的扩展功能:Solr 提供了丰富的插件和功能,可以扩展搜索功能,如地理位置搜索、语音搜索、自动完成等。这使得 Solr 可以满足各种不同的搜索需求。

在本文中,我们将介绍如何优化和调参 Solr,以实现高性能搜索。我们将从以下几个方面入手:

  1. 背景介绍
  2. 核心概念与联系
  3. 核心算法原理和具体操作步骤以及数学模型公式详细讲解
  4. 具体代码实例和详细解释说明
  5. 未来发展趋势与挑战
  6. 附录常见问题与解答

2. 核心概念与联系

在深入学习 Solr 优化和调参之前,我们需要了解一些核心概念和联系。这些概念和联系将帮助我们更好地理解 Solr 的工作原理,并提供一些优化和调参的启示。

2.1 文本分析

文本分析是将文本转换为搜索引擎可以理解和处理的格式,即索引。文本分析包括以下步骤:

  1. 切词(Tokenization):将文本拆分为单词(token)。
  2. 去停用词(Stop Words Removal):移除不重要的单词,如“是”、“的”等。
  3. 小写转换(Lowercasing):将文本转换为小写。
  4. 词干提取(Stemming):将单词转换为其基本形式。例如,将“走”转换为“走”。
  5. 词汇分析(Snowballing):将单词映射到词汇表中的索引。

2.2 索引

索引是搜索引擎存储和组织文档的数据结构。Solr 使用 Lucene 库进行索引,Lucene 支持多种数据结构,如倒排索引、正向索引等。索引包括以下组件:

  1. 文档(Document):文档是搜索引擎中的基本单位,可以包含多个字段(Field)。
  2. 字段(Field):字段是文档中的属性,可以包含多个值(Term)。
  3. 词汇表(Dictionary):词汇表是一个映射字段值到索引值的数据结构。

2.3 搜索和查询

搜索是查询请求的处理过程,查询请求是用户输入的搜索关键字。搜索包括以下步骤:

  1. 解析查询请求(Query Parsing):将用户输入的查询请求解析为搜索引擎可以理解的格式。
  2. 查询扩展(Query Expansion):根据查询请求扩展搜索条件,例如使用同义词、广义词等。
  3. 搜索执行(Search Execution):根据扩展后的查询条件执行搜索,并返回搜索结果。
  4. 排序和分页(Sorting and Paging):对搜索结果进行排序和分页处理,返回给用户。

3. 核心算法原理和具体操作步骤以及数学模型公式详细讲解

在本节中,我们将详细介绍 Solr 的核心算法原理、具体操作步骤以及数学模型公式。这些信息将帮助我们更好地理解 Solr 的工作原理,并提供一些优化和调参的启示。

3.1 文本分析算法原理

文本分析算法的核心是将文本转换为搜索引擎可以理解和处理的格式,即索引。以下是文本分析算法的主要原理:

  1. 切词(Tokenization):将文本按照空格、标点符号等分隔符进行拆分,得到单词(token)。
  2. 去停用词(Stop Words Removal):从单词列表中移除不重要的单词,如“是”、“的”等。
  3. 小写转换(Lowercasing):将文本转换为小写,以便于匹配。
  4. 词干提取(Stemming):将单词转换为其基本形式,例如将“走”转换为“走”。
  5. 词汇分析(Snowballing):将单词映射到词汇表中的索引,以便于快速查找。

3.2 索引算法原理

索引算法的核心是将文档存储和组织的数据结构。以下是索引算法的主要原理:

  1. 文档(Document):文档是搜索引擎中的基本单位,可以包含多个字段(Field)。
  2. 字段(Field):字段是文档中的属性,可以包含多个值(Term)。
  3. 词汇表(Dictionary):词汇表是一个映射字段值到索引值的数据结构,以便于快速查找。

3.3 搜索和查询算法原理

搜索和查询算法的核心是处理用户输入的查询请求,并返回相关的搜索结果。以下是搜索和查询算法的主要原理:

  1. 解析查询请求(Query Parsing):将用户输入的查询请求解析为搜索引擎可以理解的格式。
  2. 查询扩展(Query Expansion):根据查询请求扩展搜索条件,例如使用同义词、广义词等。
  3. 搜索执行(Search Execution):根据扩展后的查询条件执行搜索,并返回搜索结果。
  4. 排序和分页(Sorting and Paging):对搜索结果进行排序和分页处理,返回给用户。

3.4 数学模型公式详细讲解

Solr 使用多种数学模型来实现高性能搜索。以下是一些常见的数学模型公式:

  1. TF-IDF(Term Frequency-Inverse Document Frequency):TF-IDF 是一种用于评估文档中单词重要性的算法。TF-IDF 公式如下:

$$ TF-IDF = TF \times IDF $$

其中,TF 是单词在文档中出现次数的反对数,IDF 是单词在所有文档中出现次数的对数。TF-IDF 可以用于评估单词在文档中的重要性,并用于排序和分页。

  1. BM25:BM25 是一种基于 TF-IDF 的搜索算法,用于计算文档与查询之间的相关性。BM25 公式如下:

$$ BM25 = \frac{(k_1 + 1) \times (k_3 + 1)}{(k_1 + k_3 + k_2)} \times \frac{tf \times (k_3 + 1)}{tf + k_3 \times (1 - b + b \times \frac{avdl}{avgdl + dl})} $$

其中,$k_1$ 是查询词在文档中出现次数的反对数,$k_2$ 是查询词在所有文档中出现次数的对数,$k_3$ 是文档长度的对数,$tf$ 是查询词在文档中出现次数,$b$ 是长文档的调整因子,$avdl$ 是平均文档长度,$dl$ 是文档长度。BM25 可以用于计算文档与查询之间的相关性,并用于排序和分页。

  1. Jaccard 相似度:Jaccard 相似度是一种用于计算两个集合之间相似性的指标。Jaccard 相似度公式如下:

$$ Jaccard(A, B) = \frac{|A \cap B|}{|A \cup B|} $$

其中,$A$ 和 $B$ 是两个集合,$|A \cap B|$ 是两个集合的交集,$|A \cup B|$ 是两个集合的并集。Jaccard 相似度可以用于计算两个文档之间的相似性,并用于扩展搜索。

4. 具体代码实例和详细解释说明

在本节中,我们将通过具体代码实例来详细解释 Solr 的优化和调参过程。这些代码实例将帮助我们更好地理解 Solr 的工作原理,并提供一些优化和调参的启示。

4.1 文本分析代码实例

以下是一个文本分析代码实例,使用 Lucene 库进行文本分析:

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.query.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.util.Version;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.util.Version;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.List;
import java.util.ArrayList;

public class TextAnalysisExample {
    public static void main(String[] args) throws CorruptIndexException, IOException, ParseException {
        // 创建分析器
        Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_CURRENT);

        // 创建文档
        Document document = new Document();
        document.add(new TextField("title", "走进人工智能的未来", analyzer));
        document.add(new TextField("content", "人工智能是一种智能技术,旨在模拟人类的智能,包括学习、理解、决策等能力。人工智能的发展将对我们的生活产生重要影响。", analyzer));

        // 创建索引写入器
        FSDirectory indexDirectory = FSDirectory.open(Paths.get("index"));
        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer);
        IndexWriter writer = new IndexWriter(indexDirectory, config);

        // 添加文档到索引
        writer.addDocument(document);
        writer.close();

        // 创建查询解析器
        QueryParser queryParser = new QueryParser("content", analyzer);

        // 创建查询
        Query query = queryParser.parse("走");

        // 创建搜索器
        IndexReader reader = DirectoryReader.open(indexDirectory);
        IndexSearcher searcher = new IndexSearcher(reader);

        // 执行搜索
        TopDocs topDocs = searcher.search(query, 10);

        // 输出搜索结果
        for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
            Document foundDocument = searcher.doc(scoreDoc.doc);
            System.out.println("title: " + foundDocument.get("title"));
            System.out.println("content: " + foundDocument.get("content"));
        }
    }
}

在这个代码实例中,我们使用 Lucene 库进行文本分析。首先,我们创建了一个 SmartChineseAnalyzer 分析器,用于处理中文文本。然后,我们创建了一个 Document 对象,并将文档的标题和内容添加到 Document 对象中。接着,我们创建了一个索引写入器,并将 Document 对象添加到索引中。

接下来,我们创建了一个查询解析器,并使用查询解析器解析查询请求。然后,我们创建了一个搜索器,并使用搜索器执行搜索。最后,我们输出搜索结果。

4.2 索引代码实例

以下是一个索引代码实例,使用 Lucene 库进行索引:

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class IndexExample {
    public static void main(String[] args) throws IOException {
        // 创建索引目录
        FSDirectory indexDirectory = FSDirectory.open(Paths.get("index"));

        // 创建索引配置
        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, new StandardAnalyzer(Version.LUCENE_CURRENT));

        // 创建索引写入器
        IndexWriter writer = new IndexWriter(indexDirectory, config);

        // 创建文档列表
        List<Document> documents = new ArrayList<>();

        // 添加文档
        Document document1 = new Document();
        document1.add(new TextField("title", "走进人工智能的未来", new StandardAnalyzer(Version.LUCENE_CURRENT)));
        document1.add(new TextField("content", "人工智能是一种智能技术,旨在模拟人类的智能,包括学习、理解、决策等能力。人工智能的发展将对我们的生活产生重要影响。", new StandardAnalyzer(Version.LUCENE_CURRENT)));
        documents.add(document1);

        Document document2 = new Document();
        document2.add(new TextField("title", "人工智能的挑战", new StandardAnalyzer(Version.LUCENE_CURRENT)));
        document2.add(new TextField("content", "人工智能技术的发展面临着许多挑战,如数据不完整、安全性等。", new StandardAnalyzer(Version.LUCENE_CURRENT)));
        documents.add(document2);

        // 添加文档到索引
        for (Document document : documents) {
            writer.addDocument(document);
        }

        // 关闭索引写入器
        writer.close();
    }
}

在这个代码实例中,我们使用 Lucene 库进行索引。首先,我们创建了一个索引目录,并创建了一个索引配置。然后,我们创建了一个索引写入器。接着,我们创建了一个文档列表,并添加了两个文档。最后,我们将文档添加到索引中,并关闭索引写入器。

5. 优化和调参指南

在本节中,我们将介绍一些优化和调参指南,以提高 Solr 的性能。这些指南将帮助我们更好地理解 Solr 的工作原理,并提供一些优化和调参的启示。

5.1 查询优化

查询优化是提高 Solr 性能的关键因素之一。以下是一些查询优化的方法:

  1. 使用正确的查询语法:确保使用正确的查询语法,以便于 Solr 正确解析和执行查询请求。
  2. 使用过滤器:使用过滤器可以在查询执行之前对结果进行过滤,从而减少查询结果的数量,提高查询速度。
  3. 使用排序:使用排序可以根据用户需求对查询结果进行排序,提高查询结果的可读性和可用性。
  4. 使用分页:使用分页可以限制查询结果的数量,提高查询速度。

5.2 索引优化

索引优化是提高 Solr 性能的关键因素之二。以下是一些索引优化的方法:

  1. 使用合适的分词器:选择合适的分词器可以确保文本分析的准确性和效率。
  2. 使用合适的字段类型:选择合适的字段类型可以确保索引的准确性和效率。
  3. 使用合适的存储策略:选择合适的存储策略可以确保索引的空间效率和查询速度。
  4. 使用合适的复制策略:选择合适的复制策略可以确保索引的可用性和容错性。

5.3 集群优化

集群优化是提高 Solr 性能的关键因素之三。以下是一些集群优化的方法:

  1. 使用负载均衡器:使用负载均衡器可以将请求分发到多个 Solr 节点上,提高查询速度和可用性。
  2. 使用缓存:使用缓存可以减少数据库查询和计算开销,提高查询速度。
  3. 使用分片和复制:使用分片和复制可以实现水平扩展,提高查询速度和可用性。
  4. 使用监控和日志:使用监控和日志可以实时监控集群性能,及时发现和解决问题。

6. 常见问题

在本节中,我们将介绍一些常见问题,以及它们的解决方案。这些问题将帮助我们更好地理解 Solr 的工作原理,并提供一些优化和调参的启示。

  1. Solr 性能较慢,如何优化?
    解决方案:
  • 查询优化:使用正确的查询语法,使用过滤器,使用排序,使用分页等。
  • 索引优化:使用合适的分词器,使用合适的字段类型,使用合适的存储策略,使用合适的复制策略等。
  • 集群优化:使用负载均衡器,使用缓存,使用分片和复制,使用监控和日志等。
  1. Solr 如何处理大量数据?
    解决方案:
  • 使用分片和复制:分片可以将大量数据划分为多个部分,并将它们存储在不同的节点上。复制可以创建多个节点的副本,以提高可用性和性能。
  • 使用缓存:缓存可以减少数据库查询和计算开销,提高查询速度。
  • 使用分页和排序:分页和排序可以限制查询结果的数量,并根据用户需求对结果进行排序,提高查询效率。
  1. Solr 如何处理实时查询?
    解决方案:
  • 使用实时索引:实时索引可以将新增、更新和删除的文档立即添加到索引中,从而实现实时查询。
  • 使用消息队列:消息队列可以将查询请求发送到多个 Solr 节点上,以实现实时查询。
  1. Solr 如何处理多语言文本?
    解决方案:
  • 使用多语言分词器:多语言分词器可以将多语言文本划分为多个词,并将它们映射到不同的字段中。
  • 使用多语言查询:多语言查询可以将查询请求发送到多个 Solr 节点上,以实现多语言查询。
  1. Solr 如何处理大规模数据?
    解决方案:
  • 使用分布式搜索:分布式搜索可以将大规模数据划分为多个部分,并将它们存储在不同的节点上。这样可以实现高性能和高可用性。
  • 使用分布式索引:分布式索引可以将大规模数据划分为多个部分,并将它们存储在不同的节点上。这样可以实现高性能和高可用性。
  • 使用分布式查询:分布式查询可以将查询请求发送到多个 Solr 节点上,以实现大规模数据查询。

6. 结论

通过本文,我们了解了 Solr 的基本概念、核心功能、优化和调参指南、常见问题等。Solr 是一个强大的搜索引擎,具有高性能、高可用性、实时查询、多语言支持等特点。通过优化和调参,我们可以提高 Solr 的性能,实现高效的搜索。

7. 参考文献

[1] Apache Lucene. (n.d.). Retrieved from https://lucene.apache.org/ [2] Apache Solr. (n.d.). Retrieved from https://solr.apache.org/ [3] Elasticsearch. (n.d.). Retrieved from https://www.elastic.co/ [4] Apache Nutch. (n.d.). Retrieved from https://nutch.apache.org/ [5] Apache Tika. (n.d.). Retrieved from https://tika.apache.org/ [6] Apache Stanbol. (n.d.). Retrieved from https://stanbol.apache.org/ [7] Apache Jackrabbit. (n.d.). Retrieved from https://jackrabbit.apache.org/ [8] Apache Oak. (n.d.). Retrieved from https://oak.apache.org/ [9] Apache SOLR Cell. (n.d.). Retrieved from https://solr.apache.org/cell [10] Apache SOLR Net. (n.d.). Retrieved from https://solrnet.codeplex.com/ [11] Apache SOLR. (2021). Solr 8.11.0 Release Notes. Retrieved from https://solr.apache.org/blog/2021/12/15/solr-8-11-0-released/ [12] Apache Lucene. (2021). Lucene in Action, Second Edition. Retrieved from https://www.manning.com/books/lucene-in-action-second-edition [13] Apache Lucene. (2021). Lucene Query Parsers. Retrieved from https://lucene.apache.org/core/8_11_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html [14] Apache Lucene. (2021). Lucene Analyzers. Retrieved from https://lucene.apache.org/core/8_11_1/analyzers-common/org/apache/lucene/analysis/classic/package-summary.html [15] Apache Lucene. (2021). Lucene Directory. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/store/package-summary.html [16] Apache Lucene. (2021). Lucene IndexWriter. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/index/package-summary.html [17] Apache Lucene. (2021). Lucene IndexSearcher. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/index/package-summary.html [18] Apache Lucene. (2021). Lucene Query. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/search/package-summary.html [19] Apache Lucene. (2021). Lucene Highlighter. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/search/highlight/package-summary.html [20] Apache Lucene. (2021). Lucene Document. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/document/package-summary.html [21] Apache Lucene. (2021). Lucene Field. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/index/Fields.html [22] Apache Lucene. (2021). Lucene Analyzers Common. Retrieved from https://lucene.apache.org/core/8_11_1/analyzers-common/org/apache/lucene/analysis/classic/package-summary.html [23] Apache Lucene. (2021). Lucene Tokenizer. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/org/apache/lucene/analysis/classic/package-summary.html [24] Apache Lucene. (2021). Lucene CharFilter. Retrieved from https://lucene.apache.org/core/8_11_1/lucene/


标签:调参,查询,lucene,高性能,import,apache,org,Solr
From: https://blog.51cto.com/universsky/8995150

相关文章

  • 适合高性能、通用和强大的应用 DSPIC33CK32MP102-I/2N、DSPIC33CK32MP102-I/M6、DSPIC
    概览:dsPIC33CK64MP10x系列数字信号控制器(DSC)采用100MHzdsPIC®DSC内核,集成DSP和增强型片上外设。这些DSC支持数字电源、电机控制、高级检测和控制、高性能通用和鲁棒应用的设计。在数字电源领域,该系列器件是PFC应用、无线电源和高密度DC-DC应用的理想选择。这些DSC也非常适合......
  • SIC8833作为一款高性能的电子秤方案芯片
    SIC8833作为一款高性能的电子秤方案芯片,这款芯片是一个带24bitADC的8位RISCMCU,内置8k×16位OTP程序存储器。具体24位双向I/O口的特性,广泛应用于电子衡器和精密测量及控制系统,能满足用户的不同需求和应用场景。以下是电子秤方案芯片SIC8833的几个主要特点:1.高精度测......
  • 分布式架构的高性能与可用性
    分布式架构是一种将系统拆分为多个独立的组件或服务,并在不同的计算节点上部署这些组件或服务的架构方式。它可以提供高性能和可用性的好处。下面我将详细介绍分布式架构在高性能和可用性方面的优势。高性能横向扩展:分布式架构可以通过增加计算节点来实现横向扩展,从而提高系统......
  • PC5028高性能可编程同步升压IC内置驱动N沟道MOSFET宽压输入输出
    概述PC5028是一款高性能的增压器驱动N沟道MOSFET的控制器同步升压功率级,从宽输入电源范围从4.5V到40V。当控制器从输出电压偏置控制器可以从低至启动后1V。开关频率可以通过编程FREQ引脚上的电阻器。恒定频率电流控制体系结构允许设备同步到SYNC/SPS引脚上的外部时钟。为了优化轻负......
  • 软件架构原理与实战:设计和实现高性能搜索引擎
    1.背景介绍搜索引擎是现代互联网的核心组成部分,它通过对网页、文档、图片、视频等各种数据进行索引和检索,为用户提供了快速、准确的信息查询服务。随着互联网的迅速发展,搜索引擎的数量和规模也不断增长,成为了互联网的关键基础设施。高性能搜索引擎的设计和实现是一项非常复杂的技术......
  • Fine-tuning的PEFT库:大模型高效调参新思路
    随着深度学习技术的不断发展,大模型在各种任务中展现出了强大的性能。然而,大模型训练和调优过程需要消耗大量的计算资源和时间。为了解决这个问题,近年来,一种名为“大模型高效调参”的技术逐渐受到研究者的关注。其中,PEFT库(Parameter-EfficientFine-Tuning)是一种非常具有代表性的方......
  • 升讯威在线客服系统的并发高性能数据处理技术:超强的 SignalR
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消......
  • Go 语言实现高性能分布式锁
    Go语言实现高性能分布式锁原创 源自开发者 源自开发者 2023-12-2207:31 发表于广东 听全文源自开发者专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。49篇原创内容公众号在分布式系统中,实现跨不同......
  • 高等数值分析(高性能计算,并行计算) (Parallel and High Performance Computing)
    https://github.com/OpenMPhttps://math.ecnu.edu.cn/~jypan/Teaching/ParaComp/ParallelandHighPerformanceComputing(高等数值分析(高性能计算,并行计算))基本信息:教材:本课程主要讲授数值并行计算,内容以课堂讲义为主主要参考资料:并行计算与实现技术,迟学斌等,科学出版社,20......
  • 6.Redis,一站式高性能存储方案
    1.Redis入门Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sortedsets)等。Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人。同时,Redis还可以将内存中的数据以快照或日志的形式保......