Maison développement back-end Tutoriel Python 爬虫爬下来的数据(100G级别,2000W以上数据量)用mysql还是mongodb存储好?

爬虫爬下来的数据(100G级别,2000W以上数据量)用mysql还是mongodb存储好?

Jun 06, 2016 pm 04:22 PM
mongodb mysql


MongoDB作为非关系型数据库,其主要的优势在于schema-less。由于爬虫数据一般来说比较“脏”,不会包含爬取数据的所有field,这对于不需要严格定义schema的MongoDB再合适不过。而MongoDB内置的sharding分布式系统也保证了它的可扩展性。MongoDB的aggregation framework除了join以外可以完全替代SQL语句,做到非常快速的统计分析。

而题主的100GB、20m数据量(5k per record),据我的经验,这对于MongoDB来说不是太大问题,需要全局统计的话就做sharding+自带的Map Reduce进行优化,需要filter的话就做索引(前人也提到MongoDB的查询速度是MySQL不能比的),而且需要join的概率也不大(不需要normalize)。(推荐相关mysql视频教程:mysql教程

总而言之,主要看你用来做什么,如果是简单的raw data储存直接存诚txt文件,后续加载到HDFS都可以。如果是数据仓库设计的话,MySQL可以作为一个轻量级的aggregate table载体,作为OLAP的后端数据源。(推荐相关MongoDB视频教程:MongoDB教程

反正,在这种情况下,我是看不到MySQL单纯用做储存的必要。 well,
这个量级,且用处来看,mysql or mongo 都无所谓,区别不大。
不过你既然爬虫的数据,就会要跟着源数据结构变动而变动,mongo的模式就会更方便适合些

Mongo快的原因主要有以下几点:
写:
-3.0以前是mmap ,内存映射模式, 写入数据时候在内存里完成后就是可以返回的,这样并发会高,当然也有各种级别的安全写级别,应对不同的安全需求。
-3.0之后,WT引擎其MVCC机制更是大幅度提高了写效率,多版本控制机制提高了并发,降低了锁的粒度。

读:
MongoDB 与mysql不同,文档型的结构设计使同一条document中的内容在连续的位置内(内存啊,硬盘啊)。而关系型数据库需要把数据从各个地方找过来,join啊之类的,减少了随机io。

Mongo的设计模式也会让我们尽可能的把working set能在ram中装下。

3.0以后WT的MVCC也大幅度提高了效率。

然后,sharding的存在,让我们对于带有shard key的读与写都有了横向水平扩展的能力,也提高了效率。 这个问题是钓鱼吧...
存100G,2KW条数据随便一个数据库都妥妥的,真正用来做选择的是要怎么用... 那个熟悉用那个。 我觉得要看你的爬虫是用什么语言吧,php的就mysql比较好点,nodejs就mongodb呗~还有就是数据结构要考虑考虑,还有读写要求你也没给出这些很难推荐,不过我推崇芒果,因为跟node无缝对接,不好就是比较新,坑也多~这样以后数据有了直接来MEAN框架就可以弄爬虫应用了O(∩_∩)O

首先,数据大了,存储绝对不是一件容易的事,要考虑很多因素。

爬虫爬下来的大量数据,存在关系型数据库里往往不是很恰当的,因为当数据量和并发很大时,关系型数据库的容量与读写能力会是瓶颈,另一方面,爬虫保存的页面信息之间一般也不需要建立关系。

比较好的做法应该是存在列族数据库类型的Nosql里。Google的BigTable论文里就提出了使用BigTable存储网页信息,开源的列族数据库,像HBase、Cassandra也都很适合存储这类信息。每爬一个网页,构造一个Key(比如是倒排域名的url,或者是散列的key)和一系列Column(网页内容等),插到HBase的里,作为一行。

有一套较通用的大规模分布式爬虫方案是Nutch + Gora + HBase + Solr/Elasticsearch,爬虫爬的数据通过Gora作为数据抽象层存在HBase里,然后导入Solr或者Elasticsearch里建立索引。也可以通过Gora执行MapReduce或者导入Spark进行计算。

但是上述方案其实并不适合普通的开发者,因为搭建和维护HBase是很繁琐的,引入很多学习成本,遇到问题还要排查。重要的是这跟爬虫毫无关系啊,完全是存储问题。

所以我最终推荐的是云的方案,阿里云的OTS是一个类似HBase的Nosql数据库,成本低、读写性能好,非常适合爬虫这个场景:

  1. 不需要自己搭建与运维,开通实例即可使用,完全不用担心规模问题。

  2. 按照读写预留能力收费,爬虫爬的时候读写预留能力调上去,爬完了读写预留能力调下来。

  3. 存储成本非常低

  4. 数据存在OTS上,计算资源就可以弹性的扩容或者缩减。举个例子,假如爬虫爬的时候要使用很多云服务器,等爬虫爬完了,这些服务器就可以及时释放;另一方面,如果要对爬下来的数据做分析计算,也只需要在计算的时候购买云服务器,从OTS中把数据导下来,计算完成服务器即可释放。

开放结构化数据服务OTS_海量数据存储

利益相关:OTS开发

都是些什么数据?拿到后做什么处理?query pattern是啥?
一般join, filter多的用mysql.整块数据读的用mongo.
要是简单的话plain text JSON也不错。 应该是MongoDB好一些,其设计之初就是为了应对大数据存储的。 mongo

  • 没有schema的严格定义,json存取

  • 爬虫的字段会经常变化,字段定义可能会变更,mongo就对这方面很宽松

  • mongo是文档型的,天生为海量数据存储准备

  • 可以很轻松的横向扩展,分片,复制集群分分钟

使用mongo也有坑,3.2之后就换了新的WiredTiger引擎,占的内存略坑,对于没有太多query的存的数据库来看,内存还是会偶尔断片,没关系,在上面套一个docker ,还是一样很方便。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La page est vide après que PHP est connecté à MySQL. Quelle est la raison de la fonction Die () non valide? La page est vide après que PHP est connecté à MySQL. Quelle est la raison de la fonction Die () non valide? Apr 01, 2025 pm 03:03 PM

La page est vide après que PHP se connecte à MySQL, et la raison pour laquelle la fonction Die () échoue. Lorsque vous apprenez la connexion entre PHP et la base de données MySQL, vous rencontrez souvent des choses déroutantes ...

Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Apr 01, 2025 pm 02:48 PM

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Apr 01, 2025 pm 01:57 PM

Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Dans l'environnement Nginx PHP MySQL construit à l'aide de l'arrière-plan Baota, comment faire le côté PC et ...

Comment assurer la haute disponibilité de MongoDB sur Debian Comment assurer la haute disponibilité de MongoDB sur Debian Apr 02, 2025 am 07:21 AM

Cet article décrit comment construire une base de données MongoDB hautement disponible sur un système Debian. Nous explorerons plusieurs façons de garantir que la sécurité des données et les services continueront de fonctionner. Stratégie clé: réplicaset: réplicaset: Utilisez des répliques pour obtenir la redondance des données et le basculement automatique. Lorsqu'un nœud maître échoue, l'ensemble de répliques élise automatiquement un nouveau nœud maître pour assurer la disponibilité continue du service. Sauvegarde et récupération des données: utilisez régulièrement la commande Mongodump pour sauvegarder la base de données et formuler des stratégies de récupération efficaces pour faire face au risque de perte de données. Surveillance et alarmes: déploier les outils de surveillance (tels que Prometheus, Grafana) pour surveiller l'état de course de MongoDB en temps réel, et

Comment configurer l'expansion automatique de MongoDB sur Debian Comment configurer l'expansion automatique de MongoDB sur Debian Apr 02, 2025 am 07:36 AM

Cet article présente comment configurer MongoDB sur Debian System pour réaliser une expansion automatique. Les étapes principales incluent la configuration de l'ensemble de répliques MongoDB et de la surveillance de l'espace disque. 1. Installation de MongoDB Tout d'abord, assurez-vous que MongoDB est installé sur le système Debian. Installez à l'aide de la commande suivante: SudoaptupDaSudoaptInstall-myongoDB-Org 2. Configuration de la réplique MongoDB Ensemble de répliques MongoDB assure la haute disponibilité et la redondance des données, ce qui est la base de la réalisation d'une expansion de capacité automatique. Démarrer le service MongoDB: Sudosystemctlstartmongodsudosys

Debian Strings est-il compatible avec plusieurs navigateurs Debian Strings est-il compatible avec plusieurs navigateurs Apr 02, 2025 am 08:30 AM

"Debianstrings" n'est pas un terme standard, et sa signification spécifique n'est pas encore claire. Cet article ne peut pas commenter directement la compatibilité de son navigateur. Cependant, si "DebianStrings" fait référence à une application Web exécutée sur un système Debian, sa compatibilité du navigateur dépend de l'architecture technique de l'application elle-même. La plupart des applications Web modernes se sont engagées à compatibilité entre les navigateurs. Cela repose sur les normes Web suivantes et l'utilisation de technologies frontales bien compatibles (telles que HTML, CSS, JavaScript) et les technologies back-end (telles que PHP, Python, Node.js, etc.). Pour s'assurer que l'application est compatible avec plusieurs navigateurs, les développeurs doivent souvent effectuer des tests croisés et utiliser la réactivité

Docker construit un environnement LNMP: un seul Dockerfile ou Docker se composent-il mieux? Docker construit un environnement LNMP: un seul Dockerfile ou Docker se composent-il mieux? Apr 01, 2025 pm 02:09 PM

Dockerfile Best Practice Pour construire l'apprentissage de l'environnement LNMP Pendant Docker, de nombreux développeurs essaient de construire leur propre LNMP (Linux, Nginx, MySQL, PHP) ...

See all articles