Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie werden Daten in MySQL gespeichert?

little bottle
Freigeben: 2019-05-10 17:55:56
Original
8385 Leute haben es durchsucht

Wir alle wissen, dass die MySQL-Datenbank große Datenmengen speichern kann, aber wissen Sie, wie Daten in MySQL gespeichert werden?

Wie werden Daten in MySQL gespeichert?

Im Allgemeinen gibt es zwei Möglichkeiten, Daten in MySQL zu speichern: den synchronen Modus und den asynchronen Modus.

Synchronisationsmodus

Der Synchronisationsmodus verwendet SQL-Anweisungen, um Daten in die Datenbank einzufügen. Es ist jedoch zu beachten, dass die Analysegeschwindigkeit von Scrapy viel schneller ist als die Protokollierungsgeschwindigkeit von MySQL. Bei einer großen Analysemenge kann die Protokollierung von MySQL blockiert werden.

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()
Nach dem Login kopieren

Asynchroner Modus

Die Verwendung des synchronen Modus kann zu Blockierungen führen. Wir können Twisted verwenden, um MySQLs Warehousing und Parsing in asynchrone Vorgänge umzuwandeln, anstatt sie einfach auszuführen und festzuschreiben synchrone Operationen.

Was die Konfiguration von MySQL betrifft, können wir die Datenbank direkt in der Konfigurationsdatei konfigurieren:

MYSQL_HOST = "127.0.0.1"
MYSQL_DBNAME = "article_spider"
MYSQL_USER = "root"MYSQL_PASSWORD = "root"
Nach dem Login kopieren

Für die Konfiguration in den Einstellungen erhalten wir das Einstellungsobjekt, indem wir from_settings in der Pipeline definieren, und wir Sie können den Wert der Einstellungskonfigurationsdatei direkt in abrufen.

Verwenden Sie den von Twisted bereitgestellten asynchronen Container, um eine Verbindung zu MySQL herzustellen:

import MySQLdb
import MySQLdb.cursorsfrom twisted.enterprise
import adbapi
Nach dem Login kopieren

Die Verwendung von adbapi kann einige Vorgänge von mysqldb asynchron machen.
Verwenden Sie Cursor, um SQL-Anweisungen auszuführen und zu senden.

Codeteil:

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操作
Nach dem Login kopieren

Der obige Codeteil, mit Ausnahme von do_insert, kann wiederverwendet werden.

Das obige ist der detaillierte Inhalt vonWie werden Daten in MySQL gespeichert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage