数据是怎么存储在mysql?


本文摘自PHP中文网,作者little bottle,侵删。

我们都知道mysql数据库能存储大量数据,但是你知道数据是怎么存储在mysql中的吗?

一般将数据保存到MySQL中有两种方式,同步模式和异步模式。

同步模式

同步模式是采用SQL语句,将数据插入到数据库中。但是要注意的是Scrapy的解析速度要远大于MySQL的入库速度,当有大量解析的时候,MySQL的入库就可能会阻塞。

1

2

3

4

5

6

7

8

9

import MySQLdbclass MysqlPipeline(object):

    def __init__(self):

        self.conn = MySQLdb.connect('127.0.0.1','root','root','article_spider',charset="utf8",use_unicode=True)

        self.cursor = self.conn.cursor()    def process_item(self, item, spider):

        insert_sql = """

            insert into jobbole_article(title,create_date,url,url_object_id) VALUES (%s,%s,%s,%s)

        """

        self.cursor.execute(insert_sql,(item["title"],item["create_date"],item["url"],item["url_object_id"]))

        self.conn.commit()

异步模式

采用同步模式可能会产生阻塞,我们可以使用Twisted将MySQL的入库和解析变成异步操作,而不是简单的execute,commit同步操作。

关于MySQL的配置,我们可以直接在配置文件配置数据库:

1

2

3

MYSQL_HOST = "127.0.0.1"

MYSQL_DBNAME = "article_spider"

MYSQL_USER = "root"MYSQL_PASSWORD = "root"

在settings中的配置,我们通过在pipeline中定义from_settings获取settings对象,可以直接获取settings配置文件中的值。

使用Twisted提供的异步容器连接MySQL:

1

2

3

import MySQLdb

import MySQLdb.cursorsfrom twisted.enterprise

import adbapi

使用adbapi可以使mysqldb的一些操作变成异步化的操作
使用cursors进行sql语句的执行和提交

阅读剩余部分

相关阅读 >>

order是什么意思?

参考指南:mysql & mariadb online ddl

java最新版本连接mysql失败的解决过程

mysqli_query()的用法

c++连接并使用mysql数据库

mysql数据库在centos系统下如何被彻底删除的步骤介绍

mysql的事务隔离级别的详细介绍(附代码)

一些常用的mysql优化方法总结

mysql备份还原库命令方法解析(长文)

mysql怎么创建索引

更多相关阅读请进入《数据存储》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...