mysql에는 데이터가 어떻게 저장되나요?

little bottle
풀어 주다: 2019-05-10 17:55:56
원래의
8347명이 탐색했습니다.

mysql 데이터베이스가 많은 양의 데이터를 저장할 수 있다는 것은 모두가 알고 있지만, mysql에 데이터가 어떻게 저장되는지 알고 계시나요?

mysql에는 데이터가 어떻게 저장되나요?

일반적으로 MySQL에 데이터를 저장하는 방법에는 동기 모드와 비동기 모드의 두 가지가 있습니다.

동기화 모드

동기화 모드는 SQL 문을 사용하여 데이터베이스에 데이터를 삽입합니다. 그러나 Scrapy의 파싱 속도는 MySQL의 로깅 속도보다 훨씬 빠르며, 파싱량이 많은 경우 MySQL의 로깅이 차단될 수 있습니다.

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을 저장하고 구문 분석할 수 있습니다. 단순한 실행 및 커밋 동기 작업 대신 비동기 작업을 수행합니다.

MySQL 구성과 관련하여 구성 파일에서 직접 데이터베이스를 구성할 수 있습니다.

MYSQL_HOST = "127.0.0.1"
MYSQL_DBNAME = "article_spider"
MYSQL_USER = "root"MYSQL_PASSWORD = "root"
로그인 후 복사

설정의 구성에서 from_settings를 정의하여 설정 개체를 얻습니다. 설정 구성 파일에서 값을 직접 가져올 수 있는 파이프라인입니다.

Twisted에서 제공하는 비동기 컨테이너를 사용하여 MySQL에 연결합니다.

import MySQLdb
import MySQLdb.cursorsfrom twisted.enterprise
import adbapi
로그인 후 복사

adbapi를 사용하면 mysqldb 비동기 작업의 일부 작업을 수행할 수 있습니다.
SQL 문에 커서를 사용하여 실행하고 submit

코드 부분 :

class MysqlTwistedPipline(object):
    def __init__(self,dbpool):
        self.dbpool = dbpool    @classmethod
    def from_settings(cls,settings):
        dbparms = dict(
            host = settings["MYSQL_HOST"],
            db   = settings["MYSQL_DBNAME"],
            user = settings["MYSQL_USER"],
            passwd = settings["MYSQL_PASSWORD"],
            charset = 'utf8',
            cursorclass = MySQLdb.cursors.DictCursor,
            use_unicode=True,
        )
        dbpool = adbapi.ConnectionPool("MySQLdb",**dbparms)        return cls(dbpool)    def process_item(self, item, spider):
        #使用Twisted将mysql插入变成异步执行
        #runInteraction可以将传入的函数变成异步的
        query = self.dbpool.runInteraction(self.do_insert,item)        #处理异常
        query.addErrback(self.handle_error,item,spider)    def handle_error(self,failure,item,spider):
        #处理异步插入的异常
        print(failure)    def do_insert(self,cursor,item):
        #会从dbpool取出cursor
        #执行具体的插入
        insert_sql = """
                    insert into jobbole_article(title,create_date,url,url_object_id) VALUES (%s,%s,%s,%s)
                """
        cursor.execute(insert_sql, (item["title"], item["create_date"], item["url"], item["url_object_id"]))       #拿传进的cursor进行执行,并且自动完成commit操作
로그인 후 복사

do_insert를 제외한 위 코드 부분은 재사용이 가능합니다.

위 내용은 mysql에는 데이터가 어떻게 저장되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!