国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

Jul 27, 2020 pm 05:24 PM
mysql

Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

Interviewfragen & echte Erfahrungen

Interviewfrage: Wie erreicht man Deep Paging, wenn die Datenmenge gro? ist?

Die oben genannten Fragen k?nnen bei Vorstellungsgespr?chen oder bei der Vorbereitung auf Vorstellungsgespr?che auftreten. Bei den meisten Antworten geht es grunds?tzlich darum, Datenbanken und Tabellen zu unterteilen, um Indizes zu erstellen, aber die Realit?t ist immer so Schwer, daher wird der Interviewer Sie normalerweise fragen: Wie k?nnen wir jetzt, da die Bauzeit nicht ausreicht und das Personal nicht ausreicht, ein tiefes Paging erreichen?

Studenten, die keine praktische Erfahrung haben, sind derzeit grunds?tzlich taub. H?ren Sie mir also bitte zu.

Eine schmerzhafte Lektion

Zun?chst einmal muss klar sein: Deep Paging ist m?glich, aber Tiefe ist zuf?llig. Seitensprünge müssen unbedingt verboten werden.

Vorheriges Bild:

Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

Ratet mal, wenn ich auf Seite 142360 klicke, wird der Dienst dann explodieren?

Wie MySQL ist die MongoDB-Datenbank an sich in Ordnung. Sie wird nicht gut verarbeitet und ist bestenfalls langsam. Wenn es sich jedoch um ES handelt, ist die Natur eine andere Das Abrufen von Daten in einer Schleife ist mit dem Problem der Speichernutzung verbunden. Wenn der Code nicht elegant geschrieben ist, kann dies direkt zu einem Speicherüberlauf führen.

Warum Seitensprünge mit zuf?lliger Tiefe nicht zul?ssig sind

Lassen Sie uns darüber sprechen, warum Seitensprünge mit zuf?lliger Tiefe aus technischer Sicht nicht zul?ssig sind, oder warum Wird Deep Paging nicht empfohlen?

MySQL

Das Grundprinzip des Paging:

SELECT * FROM test ORDER BY id DESC LIMIT 10000, 20;

LIMIT 10000, 20 bedeutet, dass 10020 Zeilen gescannt werden, die die Bedingungen erfüllen und sie wegwerfen. Die ersten 10.000 Zeilen l?schen und die letzten 20 Zeilen zurückgeben. Wenn es LIMIT 1000000 ist, müssen 100, 1000100 Zeilen gescannt werden. In einer hochgradig gleichzeitigen Anwendung muss jede Abfrage mehr als 100 W Zeilen scannen. Es w?re seltsam, wenn sie nicht explodiert.

MongoDB

Grundprinzip des Pagings:

db.t_data.find().limit(5).skip(5);

In ?hnlicher Weise werden mit zunehmender Seitenzahl auch die durch Skip übersprungenen Elemente gr??er , und dieser Vorgang wird über den Iterator des Cursors implementiert. Wenn die Seitenzahl sehr gro? und h?ufig ist, wird sie unweigerlich explodieren.

ElasticSearch

Aus gesch?ftlicher Sicht handelt es sich bei ElasticSearch nicht um eine typische Datenbank, sondern um eine Suchmaschine. Wenn die gewünschten Daten unter den Filterbedingungen nicht gefunden werden Wenn Sie mit dem Deep-Paging fortfahren, werden die gewünschten Daten nicht gefunden. Wenn wir ES als Datenbank für die Abfrage verwenden, werden wir beim Paging definitiv auf das Limit von max_result_window sto?en Die Offset-Grenze betr?gt zehntausend.

Abfrageprozess:

  • Wenn Sie beispielsweise Seite 501 mit 10 Elementen pro Seite abfragen, sendet der Client eine Anfrage an einen Knoten

  • Dieser Knoten sendet Daten an jeden Shard, und jeder Shard fragt die ersten 5010 Daten ab

  • Die Abfrageergebnisse werden an den Knoten zurückgegeben, und dann werden die Daten zurückgegeben integriert und die ersten 5010 Daten werden herausgenommen

  • Zurück zum Client

Daraus k?nnen wir erkennen, warum der Offset begrenzt werden sollte Wenn Sie au?erdem eine Bildlaufmethode wie die Deep-Page-Jump-Abfrage der Search After API verwenden, kann es erforderlich sein, insgesamt Millionen oder Dutzende von Daten zu scrollen, allein für die letzten 20 Die Effizienz kann man sich vorstellen.

Nehmen Sie erneut Kontakt mit dem Produkt auf

Wie das Sprichwort sagt: Wenn Technologie Probleme nicht l?sen kann, lassen Sie sie vom Unternehmen l?sen!

W?hrend meines Praktikums glaubte ich an das B?se des Produkts und musste Deep Paging + Page Jumps implementieren. Jetzt muss ich das Chaos korrigieren und die folgenden ?nderungen im Gesch?ft vornehmen:

Standardfilterung hinzufügen Bedingungen so weit wie m?glich. Zum Beispiel: Zeitraum, der Zweck besteht darin, die Menge der angezeigten Daten zu reduzieren

?ndern Sie die Anzeigemethode für Seitensprünge, ?ndern Sie sie in eine scrollende Anzeige oder springen Sie in einem kleinen Bereich zu Seiten

Referenzbild für scrollende Anzeige:

Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

Referenzbild für Seitensprünge im kleinen Ma?stab:

Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

Allgemeine L?sung

Die schnelle L?sung in kurzer Zeit besteht haupts?chlich aus folgenden Punkten:

  • Unverzichtbar: Zum Sortieren von Feldern und Filtern Stellen Sie unter bestimmten Bedingungen sicher, dass Sie den Index festlegen

  • Kern: Verwenden Sie bekannte Daten für Seitenzahlen mit kleinem Bereich oder bekannte Daten für das Scrollen, um Offsets zu reduzieren

  • Extra: Wenn Sie auf eine schwierig zu handhabende Situation sto?en, k?nnen Sie auch überschüssige Daten abrufen und bestimmte Abfangvorg?nge durchführen, ohne dass die Auswirkungen auf die Leistung erheblich sind

MySQL

Original-Paging-SQL:

# 第一頁(yè)
SELECT * FROM `year_score` where `year` = 2017 ORDER BY id limit 0, 20;
# 第N頁(yè)
SELECT * FROM `year_score` where `year` = 2017 ORDER BY id limit (N - 1) * 20, 20;

Durch Kontext neu geschrieben als:

# XXXX 代表已知的數(shù)據(jù)
SELECT * FROM `year_score` where `year` = 2017 and id > XXXX ORDER BY id limit 20;

在 沒(méi)內(nèi)鬼,來(lái)點(diǎn)干貨!SQL優(yōu)化和診斷 一文中提到過(guò),LIMIT會(huì)在滿(mǎn)足條件下停止查詢(xún),因此該方案的掃描總量會(huì)急劇減少,效率提升Max!

ES

方案和MySQL相同,此時(shí)我們就可以隨用所欲的使用 FROM-TO Api,而且不用考慮最大限制的問(wèn)題。

MongoDB

方案基本類(lèi)似,基本代碼如下:

Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

相關(guān)性能測(cè)試:

Wie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?

如果非要深度隨機(jī)跳頁(yè)

如果你沒(méi)有杠過(guò)產(chǎn)品經(jīng)理,又該怎么辦呢,沒(méi)關(guān)系,還有一絲絲的機(jī)會(huì)。

在 SQL優(yōu)化 一文中還提到過(guò)MySQL深度分頁(yè)的處理技巧,代碼如下:

# 反例(耗時(shí)129.570s)
select * from task_result LIMIT 20000000, 10;
# 正例(耗時(shí)5.114s)
SELECT a.* FROM task_result a, (select id from task_result LIMIT 20000000, 10) b where a.id = b.id;
# 說(shuō)明
# task_result表為生產(chǎn)環(huán)境的一個(gè)表,總數(shù)據(jù)量為3400萬(wàn),id為主鍵,偏移量達(dá)到2000萬(wàn)

該方案的核心邏輯即基于聚簇索引,在不通過(guò)回表的情況下,快速拿到指定偏移量數(shù)據(jù)的主鍵ID,然后利用聚簇索引進(jìn)行回表查詢(xún),此時(shí)總量?jī)H為10條,效率很高。

因此我們?cè)谔幚鞰ySQL,ES,MongoDB時(shí),也可以采用一樣的辦法:

  • 限制獲取的字段,只通過(guò)篩選條件,深度分頁(yè)獲取主鍵ID

  • 通過(guò)主鍵ID定向查詢(xún)需要的數(shù)據(jù)

瑕疵:當(dāng)偏移量非常大時(shí),耗時(shí)較長(zhǎng),如文中的 5s

推薦教程:《MySQL教程

文章來(lái)源:https://juejin.im/post/5f0de4d06fb9a07e8a19a641

Das obige ist der detaillierte Inhalt vonWie kann man mit MySQL + ES + MongoDB kompatibel sein, um ein tiefes Paging von Hunderten Millionen Daten zu erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
So verwenden Sie PHP, um eine Q & A -Community -Plattform zu entwickeln, detaillierte Erl?uterung des interaktiven Monetisierungsmodells mit PHP -Community So verwenden Sie PHP, um eine Q & A -Community -Plattform zu entwickeln, detaillierte Erl?uterung des interaktiven Monetisierungsmodells mit PHP -Community Jul 23, 2025 pm 07:21 PM

1. Die erste Wahl für die Kombination aus Laravel Mysql Vue/React in der PHP -Entwicklungsfrage und der Antwortgemeinschaft ist die erste Wahl für die Kombination aus Laravel Mysql Vue/React aufgrund ihrer Reife im ?kosystem und der hohen Entwicklungseffizienz; 2. Die hohe Leistung erfordert Abh?ngigkeit von Cache (REDIS), Datenbankoptimierung, CDN und asynchronen Warteschlangen; 3. Die Sicherheit muss mit Eingabefilterung, CSRF -Schutz, HTTPS, Kennwortverschlüsselung und Berechtigungssteuerung erfolgen. V.

So setzen Sie Umgebungsvariablen in der PHP -Umgebung Beschreibung des Hinzufügens von PHP -Ausführungsumgebungsvariablen So setzen Sie Umgebungsvariablen in der PHP -Umgebung Beschreibung des Hinzufügens von PHP -Ausführungsumgebungsvariablen Jul 25, 2025 pm 08:33 PM

Es gibt drei Hauptmethoden, um Umgebungsvariablen in PHP festzulegen: 1. Globale Konfiguration über php.ini; 2. durch einen Webserver (z. B. SetEnv von Apache oder FastCGI_Param von Nginx); 3. Verwenden Sie die Funktion Putenv () in PHP -Skripten. Unter ihnen eignet sich Php.ini für globale und selten ?ndernde Konfigurationen. Die Webserverkonfiguration eignet sich für Szenarien, die isoliert werden müssen, und Putenv () ist für tempor?re Variablen geeignet. Die Persistenz -Richtlinien umfassen Konfigurationsdateien (z. B. Php.ini oder Webserverkonfiguration), .env -Dateien werden mit der DOTENV -Bibliothek und dynamische Injektion von Variablen in CI/CD -Prozessen geladen. Sicherheitsmanagement sensible Informationen sollten hart codiert werden, und es wird empfohlen.

Verwendung von PHP zur Entwicklung des Produktempfehlungsmoduls PHP -Empfehlungsalgorithmus und Benutzerverhaltensanalyse Verwendung von PHP zur Entwicklung des Produktempfehlungsmoduls PHP -Empfehlungsalgorithmus und Benutzerverhaltensanalyse Jul 23, 2025 pm 07:00 PM

Um Benutzerverhaltensdaten zu erfassen, müssen Sie das Browsen, die Suche, den Kauf und andere Informationen über PHP in die Datenbank aufzeichnen und sie reinigen und analysieren, um die Interessenpr?ferenzen zu untersuchen. 2. Die Auswahl der Empfehlungsalgorithmen sollte auf der Grundlage von Datenmerkmalen ermittelt werden: basierend auf Inhalten, kollaborativen Filterung, Regeln oder gemischten Empfehlungen; 3. Die kollaborative Filterung kann in PHP implementiert werden, um die ?hnlichkeit der Benutzer Cosinus Cosinus zu berechnen, K n?chste Nachbarn auszuw?hlen, gewichtete Vorhersagewerte zu erzielen und Produkte mit hoher Punktzahl zu empfehlen. 4. Die Leistungsbewertung verwendet Genauigkeit, Rückruf, F1 -Wert und CTR, Conversion -Rate und überprüfen den Effekt durch A/B -Tests. 5. Kaltstartprobleme k?nnen durch Produktattribute, Benutzerregistrierungsinformationen, Volksempfehlungen und Expertenbewertungen gelindert werden. 6. Die Leistungsoptimierungsmethoden umfassen zwischengespeicherte Empfehlungsergebnisse, asynchrone Verarbeitung, verteiltes Computing und SQL -Abfrageoptimierung, wodurch die Empfehlungseffizienz und die Benutzererfahrung verbessert werden.

Automatisierung von MySQL -Bereitstellungen mit Infrastruktur als Code Automatisierung von MySQL -Bereitstellungen mit Infrastruktur als Code Jul 20, 2025 am 01:49 AM

Um die MySQL -Bereitstellungsautomatisierung zu erreichen, besteht der Schlüssel darin, Terraform zu verwenden, um Ressourcen, Ansible Management -Konfiguration, Git für die Versionskontrolle und die St?rkung der Sicherheit und des Berechtigungsmanagements zu definieren. 1. Verwenden Sie Terraform, um MySQL -Instanzen wie Version, Typ, Zugriffskontrolle und andere Ressourcenattribute von AWSRDs zu definieren. 2. Verwenden Sie AnsiliblePlaybook, um detaillierte Konfigurationen wie Datenbankbenutzererstellung, Berechtigungseinstellungen usw. Zu realisieren; 3.. Alle Konfigurationsdateien sind in GIT -Management, Unterstützung ?nderungsverfolgung und kollaborativer Entwicklung enthalten. 4. Vermeiden Sie hartcodierte sensible Informationen, verwenden Sie Vault oder AnsibleVault, um Kennw?rter zu verwalten und die Zugriffskontrolle und die Mindestberechtigungsprinzipien festzulegen.

Sicherung von MySQL -Verbindungen mit SSL/TLS -Verschlüsselung Sicherung von MySQL -Verbindungen mit SSL/TLS -Verschlüsselung Jul 21, 2025 am 02:08 AM

Warum brauche ich eine SSL/TLS -Verschlüsselungs -MySQL -Verbindung? Da unverschlüsselte Verbindungen dazu führen k?nnen, dass sensible Daten abgefangen werden, kann das Erm?glichen von SSL/TLS-Angriffen von Menschen in der Zwischenzeit verhindern und die Compliance-Anforderungen erfüllen. 2. Wie konfigurieren Sie SSL/TLS für MySQL? Sie müssen ein Zertifikat und einen privaten Schlüssel generieren, die Konfigurationsdatei ?ndern, um die SSL-CA-, SSL-Cert- und SSL-Key-Pfade anzugeben und den Dienst neu zu starten. 3. Wie kann man SSL erzwingen, wenn der Client eine Verbindung herstellt? Implementiert durch Angabe von Anforderungs- oder Anforderungsquellen bei der Erstellung eines Benutzers; 4. Details, die in der SSL -Konfiguration leicht übersehen werden, umfassen Zertifikatpfadberechtigungen, Probleme mit Zertifikatverlauf und Client -Konfigurationsanforderungen.

So entwickeln Sie das KI -Intelligentformsystem mit PHP -PHP -Intelligent -Formular und Analyse So entwickeln Sie das KI -Intelligentformsystem mit PHP -PHP -Intelligent -Formular und Analyse Jul 25, 2025 pm 05:54 PM

Bei der Auswahl eines geeigneten PHP -Frameworks müssen Sie nach den Projektanforderungen umfassend berücksichtigen: Laravel ist für die schnelle Entwicklung geeignet und bietet eloquentorm- und Blade -Vorlagenmotoren, die für den Datenbankbetrieb und das dynamische Formrending bequem sind. Symfony ist flexibler und für komplexe Systeme geeignet. CodeIgniter ist leicht und für einfache Anwendungen mit hohen Leistungsanforderungen geeignet. 2. Um die Genauigkeit von KI-Modellen sicherzustellen, müssen wir mit einem qualitativ hochwertigen Datentraining, einer angemessenen Auswahl von Bewertungsindikatoren (wie Genauigkeit, Rückruf, F1-Wert), regelm??iger Leistungsbewertung und Modellabstimmung und sicherstellen, dass die Codequalit?t durch Testen und Integrationstests der Code sichergestellt wird, um die Eingabedaten kontinuierlich zu überwachen. 3.. Viele Ma?nahmen sind erforderlich, um die Privatsph?re der Benutzer zu schützen: Verschlüsseln und speichern sensible Daten (wie AES

So erstellen Sie mit PHP einen Online -Kundendienstroboter. PHP Intelligente Kundendienst -Implementierungstechnologie So erstellen Sie mit PHP einen Online -Kundendienstroboter. PHP Intelligente Kundendienst -Implementierungstechnologie Jul 25, 2025 pm 06:57 PM

PHP spielt die Rolle des Connector- und Brain Center im intelligenten Kundendienst, der für die Verbindung von Front-End-Eingaben, Datenbankspeicher und externen KI-Diensten verantwortlich ist. 2. Bei der Implementierung ist es notwendig, eine mehrschichtige Architektur zu erstellen: Das Front-End empf?ngt Benutzernachrichten, die PHP-Back-End-Vorverarbeitete und Routes-Anfragen, stimmt zun?chst mit der lokalen Wissensbasis überein und verpasst sie, rufen Sie externe KI-Dienste wie OpenAI oder Dialogflow an, um intelligente Antwort zu erhalten. 3. Die Sitzungsverwaltung wird von PHP an MySQL und andere Datenbanken geschrieben, um die Kontext -Kontinuit?t zu gew?hrleisten. 4. Integrierte KI -Dienste müssen mit Guzzle HTTP -Anfragen senden, APIKEYs sicher speichern und eine gute Aufgabe der Fehlerbehandlung und -antwortanalyse durchführen. 5. Datenbankdesign muss Sitzungen, Nachrichten, Wissensbasis und Benutzertabellen enthalten, vernünftigerweise Indizes erstellen, Sicherheit und Leistung sicherstellen und Roboterspeicher unterstützen

Wie mache ich PHP -Container -Unterstützung automatisch? Kontinuierlich integrierte CI -Konfigurationsmethode der PHP -Umgebung Wie mache ich PHP -Container -Unterstützung automatisch? Kontinuierlich integrierte CI -Konfigurationsmethode der PHP -Umgebung Jul 25, 2025 pm 08:54 PM

Um PHP -Container zur Unterstützung der automatischen Konstruktion zu erm?glichen, liegt der Kern in der Konfiguration des Continuous Integration (CI) -Prozesses. 1. Verwenden Sie Dockerfile, um die PHP -Umgebung zu definieren, einschlie?lich grundlegender Bild-, Erweiterungsinstallations-, Abh?ngigkeitsmanagement- und Berechtigungseinstellungen. 2. Konfigurieren Sie CI/CD-Tools wie GitLabci und definieren Sie die Erstell-, Test- und Bereitstellungsstadien über die Datei .gitlab-ci.yml, um automatische Konstruktion, Test und Bereitstellung zu erreichen. 3.. Integrieren Sie Testframeworks wie Phpunit, um sicherzustellen, dass die Tests automatisch nach Code?nderungen ausgeführt werden. 4. Verwenden Sie automatisierte Bereitstellungsstrategien wie Kubernetes, um die Bereitstellungskonfiguration durch die Datei bereitzustellen. 5. Dockerfile optimieren und mehrstufige Konstruktionen übernehmen

See all articles