低成本TB级数据库技术选型之思考两三点

2024-01-01 20:44

本文主要是介绍低成本TB级数据库技术选型之思考两三点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

前段时间在搞毕业论文的选题,最头疼的就是大量的文献检索和阅读,从研究的角度上我们可以将文献分为四类:

  1. 理论文献:为研究提供理论的框架和基础的文献。这些文献可能并不会和所做的研究直接相关,甚至由于理论发展过程等原因可能是属于另一个研究领域的文献,并且由于很多学科理论和实践发展关系不一,一些实证研究所依赖的理论都是较早的文献。
  2. 背景文献:帮助研究者更好地认识和理解所要研究的现实问题的文献与资料。这些文献未必与所要进行的研究直接相关,但却是认识这一研究问题不可或缺的背景资料。这些内容可能涉及较多类型的文献媒介,诸如政策文本、新闻、时事评论、研究综述等。
  3. 方法论文献:为研究工具、技术手段提供支持的文献。方法论文献在大多数期刊中已经被认为是独立于研究文章的一类文献,主要用于陈述方法的技术基础、应用过程以及其应用价值等。
  4. 核心文献:即与要进行的研究在研究问题、研究框架上最相关的文献。一般而言就是文献综述部分对于主要研究问题的相关研究。

各种检索工具用了一遍之后,整体感觉就是两大痛点不能兼顾:

        1、文献的覆盖率,不能漏掉重要文献;

        2、文献的聚焦度,不能大海捞针,参杂太多无用结果。

很多研友推荐的connected papers这个工具确实有过人之处,输入一篇论文的标题,它会为你构建一个该领域类似论文的图谱。你可以从图谱中发现你感兴趣领域的趋势,对领域内文献引用动态有一个真实的、可视化的理解,并对最新发表的重要论文工作及时进行跟进。最关键的是:检索出来的文献关联度非常非常高。

我就很好奇背后的原理,闲暇时间利用MONGODB,尝试建立类似项目:欢迎! LIBRARIES S2 -Libraries S2是一个可视化工具,可以帮助研究人员和应用科学家找到与其工作领域相关的学术论文。icon-default.png?t=N7T8https://s2.libraries.cn/拿到授权key之后,花了20多天时间把全部2.14亿篇文献数据库下载下来以后,20TB+的jsonl文件,我整个人都懵逼了,这不是一台消费级的机器可以伺候的规模啊。

二、如何低成本发布这些数据呢? 

海量数据平台基本分为两类:查询型和分析型。分析型对计算资源没有查询型敏感,可以想象每秒分析一次已经很变态了,但是每秒10万次的查询稀松平常。

这次任务目的是:本地化部署查询服务以替代官方API,提升服务稳定性、突破限制和提高响应速度。

机器配置:centos7.8,16核心、32GB内存

提到JSON 的数据处理,大部分人想到的一定是MONGODB。提到MOGNODB 的特长,必须提到JSON ,在数据库处理的格式中,我们大多习惯关系型的数据的表达方式,而在除了数据关系型的二维表格的数据表达的方式以外,更加简便的流行的数据格式的表达是 JSON ,JSON,即JavaScript对象表示法,是一种易于人类阅读的数据交换格式,尽管JSON是基于JavaScript编程语言标准的一个子集,但它完全独立于语言。

无论是ORACLE 还是 MYSQL 到POSTGRESQL 在JSON 的处理上,都各有千秋,但只要到实际的工作中,我们大多不敢去用这些传统的数据库来处理JSON ,或者说他们这些数据库,无法给我们信任感。

1  量,量是一个MOGNODB 的特点,一个表可能有200万,5000万,1个亿 ,这些都是传统数据库可以处理的内容,但是如果我告诉你10个亿呢,100个亿呢,此时传统数据库基本上就没有了声音,留下的只有MONGODB 还可以对你这些要求进行支持。基于JSON 数据的特点,要不很小,要不很大,尤其在一些第三方的信息传输或日志的记录中,MOGNODB 存储的数据量非常大,可能每秒就是几万条数据的进入,而且是持续性的。很容易一个表就能达到成千上万的小CASE。

2  存,在数据进来后如何能存得下这些数据是另一个能力,数据被压缩的很小,这是mongodb的另一个特性,基于这个特性mongodb 通过以下方式来完成这个工作:

使用BSON格式:MongoDB存储数据时采用了BSON(Binary JSON)格式,这是一种类似JSON的二进制序列化数据表示。BSON格式在保留JSON可读性的基础上,提供了更紧凑的二进制表示,有助于提高存储效率。

支持多种压缩算法:MongoDB支持多种数据压缩算法,如Snappy、zlib等。这些压缩算法能够有效降低磁盘空间占用,提高存储的压缩比。

索引压缩:MongoDB还对索引进行了压缩处理,以减少索引所占用的磁盘空间。通过压缩索引,可以提高查询效率,并节省存储空间。

分片技术:MongoDB使用分片技术将数据分布在多个服务器上。这不仅有助于水平扩展,还可以优化存储空间的利用,从而提高整体的压缩比

这些能力看似一般,但是这些能力的组合让其他的数据库基本没有了声音,因为他的确是实实在在的让你看到了结果。本次任务中,与jsonl原文件相比,导入MongoDB之后体积压缩到了60%左右,这包括了索引。

3  快,这单又是MONGODB的一个特点,在传统数据库的慢查询都在1秒进行标定的时候, MONGODB 的慢查询基本在500ms,也就是说mongodb 从未把自己的数据处理能力和 传统的那些数据库进行对标,而是将自己的性能,标定在   传统数据库 和  REDIS 缓存型数据库之间的一个标定人设。所以一般我们发现 MONGODB 的数据处理速度在 500毫秒以外的情况下,优化就开始了。由于本次任务核心是海量数据的简单查询,其实就是对paperId这个整型字段的匹配,加索引后,检索效率非常高,2.14亿条数据,基本上200毫秒左右就能搞定。

4  多元化的发展,MongoDB Atlas 是MongoDB官方提供的一种托管式数据库服务。它让你可以方便地在主流云服务商(如Amazon Web Services、Google Cloud Platform和Microsoft Azure)上部署、管理和扩展MongoDB数据库。

MongoDB Atlas 提供了以下特点和优点:

  • 简化部署:使用MongoDB Atlas,你可以轻松地创建和部署MongoDB数据库。图形化界面使得配置和管理变得更加简单。
  • 自动化运维:Atlas自动处理数据库日常运维任务,如备份、修复、监控和性能调优等,让开发者可以专注于应用程序本身而无需关心数据库管理细节。
  • 安全性:Atlas提供多层次的数据库安全保障,包括网络隔离、加密、用户认证和访问控制等。这有助于确保你的数据得到充分保护。
  • 弹性伸缩:根据实际需要,MongoDB Atlas可以轻松地进行水平和垂直扩展。你可以按需调整集群大小和性能以满足应用程序的要求。
  • 全球分布:Atlas支持跨区域的数据分布,以便最佳地部署你的应用程序。这有助于降低延迟,提高数据冗余,并确保高可用性。

5  更可靠和更智能的 HA 高可用和读写分离,包括数据冗余、数据节点故障的自动迁移并且速度极快、读写分离的控制可在每条数据的写入中进行设定、可以实现shard storage 方式中的独立分离,并且不需要中间件的支持。

这篇关于低成本TB级数据库技术选型之思考两三点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560464

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom