suchen
HeimDatenbankMySQL-Tutorial再见 MongoDB,你好 PostgreSQL

Olery 差不多成立于5年前。始于Ruby代理开发的单一产品(Olery Reputation),随着时间的推移,我们开始致力于一系列不同的产品和应

Olery 差不多成立于5年前。始于Ruby代理开发的单一产品(Olery Reputation),随着时间的推移,我们开始致力于一系列不同的产品和应用程序。当今,我们的产品不仅有(Olery) Reputation,还有Olery Feedback, Hotel Review Data API,widgets ,在不久的将来它可以嵌入到网站和更多产品/服务中。

我们增加了很多应用程序的数量。当今,我们部署了超过25个不同的应用程序(全为Ruby),它们中的一些是web应用程序(Rails或者Sinatra),但大多数的是后台运行程序。

我们最引以为豪的是迄今为止我们所取得的成就,不过在这些成就的背后总闪现着一样东西,即基础数据库。从Olery成立之日起,我们就安装了数据库,它用MySQL来存储(用户、合同等等)核心数据,用MongoDB来存储评论及其类似的数据(即哪些在数据丢失的情况下很容易恢复的数据)。一开始,这样的安装运行的非常好,然而,随着公司的成长,我们开始遇到了各种各样的问题,尤其是MongoDB的问题居多。其中一些问题是由于应用与数据库的交互方式而引起的,一些则是由数据库本身而产生的。

例如,某个时刻,我们需要从MongoDB中删除一百万个文档,以后再把这些数据重新插入到MongoDB里。这样的处理方法使得整个数据库几乎要被锁定数个小时,自然服务性能就会降低。而且直到对数据库执行修复(即在MongoDB上执行repairDatabase命令)后才会解锁。而且完成修复还要花费数个小时,修复所花的小时数要根据数据库的大小来确定。

在另一实例中我们注意到我们的应用程序的性能降低和设法跟踪到的 MongoDB 集群。然而,经过进一步检查,我们无法找到问题的真正原因。无论我们怎么安装,或使用什么工具敲了什么命令我们都找不到原因。直到我们更换了集群的初选,性能才恢复正常。

这只是两个例子,我们已经有过许多这样的情况。这个问题的核心是,这不只数据库在运行,而且无论我们何时察看它都没有绝对的迹象表明是什么原因导致的问题。

无模式的问题

另外,我们面对的核心问题是mongoDB的重要特征之一:模式的缺乏。模式的缺乏可能听起来是有趣的,并且在一些情况下是有好处的。然而,对于许多无模式存储引擎的用法,其导致了一些模式之间的内部问题。这些模式没有通过你的存储引擎定义而是通过你的应用的行为及其可能的需要而定义的。

例如:你可能有一页存储你的应用需要的字符串类型的title字段的集合。这儿这个模式是非常符合当前情形的,即使它没有被明确的定义。但如果这个数据结果改变超时,尤其是如果原来的数据没有被迁移到新的数据结构,这就成了问题(在一些无模式的存储引擎上是相当有问题的)。例如,你可能有下面这样的Ruby代码:

post_slug = post.title.downcase.gsub(/\W+/, '-')

这样,针对每一个有“title”字段并返回一个String的文档,它都能正常工作。然而,对于那些使用不同字段名字(例如:post_title)或者根本没有标题字段的文档来说,它将不能正常工作。为了处理这种情况,你需要将代码调整为下面内容:

if post.title
  post_slug = post.title.downcase.gsub(/\W+/, '-')
else
  # ...
end

另一种处理方法是,在你的模型中定义一个模式。例如 Mongoid,一个流行的针对Ruby的MongoDB ODM,就能让你做到这一点。然而,当使用这些工具定义一个模式时,你可能会好奇为什么它们不在数据库内定义该模式。实际上,这样做可以解决另一个问题:可重用性。如果你只有一个应用程序,那么在代码中定义模式并不是什么大问题。然而,如果你有许多应用程序的话,这将很快会成为一个*烦。

无模式存储引擎希望通过删除对模式的限制的方式,让你的工作变得更简单。但现实的情况是,确保数据一致性的责任推到了用户自己的身上。有时候无模式引擎可以工作,但我打赌,更多的时候是事与愿违。

好数据库的需求

Olery有了更多的特殊需求后,迫使我寻求一款更好的数据库来解决问题。对于系统,特别是数据库,我们非常注重以下几点:

  • 一致性

  • 数据和系统行为的可视化

  • 正确性和明确性

  • 可拓展

  • 一致性是重要的在于它有助于帮助我们对系统设定明确的期望。如果数据总是按照同样的方式存储,那么系统可以很方便的使用这些数据。如果在数据库层面要求表的莫一列必须存在,那么在应用层面就不用检查这列数据是否存在。数据库即使实在高压情况下,也必须保证每一次操作的完整性。没有什么事情比单纯的插入数据,过了几分钟后却找不到数据的事更让人沮丧了。

    可见性包含了两点:系统本身以及从中获取数据的容易程度。如果一个系统出错那么应该易于调试。反过来,用户应很容易查到想要查询的数据。

    正确性是指系统的行为如我们所期望的那样。如果某个字段定义为一个数值型,没有人可以像其中插入文本。这方面MySQL是臭名昭著,一旦你这样做你将得到伪结果。

    可扩展性不仅针对性能而言,而且也涉及金融方面和系统能够多么好地应对不断变化的需求。一个系统在没有大量资金成本或减缓系统所依赖的开发周期情况下,很难表现得非常好。

    搬离MongoDB

    上面的需求牢记于心后,我们就开始寻找一个取代MongoDB的数据库。上面提到的特性通常是传统RDBM特征的一组核心集,所以我们锁定了两个候选者:MySQL和PostgreSQL。
    本来,MySQL是第一候选,因为我们的一些关键数据已经在使用它存储。然而,,MySQL也有一些问题。例如,当将一个字段定义为int(11)时,你却可以轻松地向该字段插入文本数据,因为MySQL会试图对它进行转换。下面是一些例子:

    mysql> create table example ( `number` int(11) not null );
    Query OK, 0 rows affected (0.08 sec)
     
    mysql> insert into example (number) values (10);
    Query OK, 1 row affected (0.08 sec)
     
    mysql> insert into example (number) values ('wat');
    Query OK, 1 row affected, 1 warning (0.10 sec)
     
    mysql> insert into example (number) values ('what is this 10 nonsense');
    Query OK, 1 row affected, 1 warning (0.14 sec)
     
    mysql> insert into example (number) values ('10 a');
    Query OK, 1 row affected, 1 warning (0.09 sec)
     
    mysql> select * from example;
    +--------+
    | number |
    +--------+
    |    10 |
    |      0 |
    |      0 |
    |    10 |
    +--------+
    4 rows in set (0.00 sec)

    值得注意的是,MySQL在这些情况下会发出警告。但是,仅仅是警告而已,它们通常(若非总是)会被忽略。

    Stellungnahme
    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
    Erläutern Sie die Rolle von InnoDB -Wiederherstellung von Protokollen und Rückgängigscheinen.Erläutern Sie die Rolle von InnoDB -Wiederherstellung von Protokollen und Rückgängigscheinen.Apr 15, 2025 am 12:16 AM

    InnoDB verwendet Redologs und undologische, um Datenkonsistenz und Zuverlässigkeit zu gewährleisten. 1.REDOLOogen zeichnen Datenseitenänderung auf, um die Wiederherstellung und die Durchführung der Crash -Wiederherstellung und der Transaktion sicherzustellen. 2.Strundologs zeichnet den ursprünglichen Datenwert auf und unterstützt Transaktionsrollback und MVCC.

    Was sind die wichtigsten Metriken, die in einer Erklärungsausgabe (Typ, Schlüssel, Zeilen, extra) suchen müssen?Was sind die wichtigsten Metriken, die in einer Erklärungsausgabe (Typ, Schlüssel, Zeilen, extra) suchen müssen?Apr 15, 2025 am 12:15 AM

    Zu den wichtigsten Kennzahlen für Erklärungsbefehle gehören Typ, Schlüssel, Zeilen und Extra. 1) Der Typ spiegelt den Zugriffstyp der Abfrage wider. Je höher der Wert ist, desto höher ist die Effizienz, wie z. B. const besser als alle. 2) Der Schlüssel zeigt den verwendeten Index an, und Null zeigt keinen Index an. 3) Zeilen schätzt die Anzahl der gescannten Zeilen und beeinflussen die Abfrageleistung. 4) Extra liefert zusätzliche Informationen, z.

    Was ist der vorübergehende Status im Erklären und wie kann man ihn vermeiden?Was ist der vorübergehende Status im Erklären und wie kann man ihn vermeiden?Apr 15, 2025 am 12:14 AM

    Die Verwendung von Temporary zeigt an, dass die Notwendigkeit, temporäre Tabellen in MySQL-Abfragen zu erstellen, die üblicherweise in der Reihenfolge mit unterschiedlichen, gruppby- oder nicht indizierten Spalten gefunden werden. Sie können das Auftreten von Indizes vermeiden und Abfragen umschreiben und die Abfrageleistung verbessern. Insbesondere bedeutet dies, dass MySQL temporäre Tabellen erstellen muss, um Abfragen zu verarbeiten. Dies tritt normalerweise auf, wenn: 1) Deduplizierung oder Gruppierung bei Verwendung von unterschiedlichem oder gruppy; 2) Sortieren Sie, wann OrderBy Nicht-Index-Spalten enthält. 3) Verwenden Sie eine komplexe Unterabfrage oder verbinden Sie Operationen. Optimierungsmethoden umfassen: 1) OrderBy und GroupB

    Beschreiben Sie die verschiedenen SQL -Transaktions -Isolationsstufen (gelesen, gelesen, lesing festgelegt, wiederholbares Lesen, serialisierbar) und ihre Auswirkungen auf MySQL/InnoDB.Beschreiben Sie die verschiedenen SQL -Transaktions -Isolationsstufen (gelesen, gelesen, lesing festgelegt, wiederholbares Lesen, serialisierbar) und ihre Auswirkungen auf MySQL/InnoDB.Apr 15, 2025 am 12:11 AM

    MySQL/InnoDB unterstützt vier Transaktions -Isolationsstufen: ReadUnCommitt, Readcommidt, RepeatableAlead und Serializable. 1.Readuncommittes ermöglicht das Lesen von nicht übereinstimmenden Daten, was zu schmutzigem Lesen führen kann. 2. Readcommited vermeidet schmutziges Lesen, aber es kann nicht wiederholbare Lektüre auftreten. 3.Repeatableread ist die Standardebene, die schmutzige Lektüre und nicht wiederholbares Lesen vermeidet, aber Phantom-Lesen kann auftreten. V. Die Auswahl der geeigneten Isolationsstufe erfordert die Ausgleichsdatenkonsistenz und die Leistungsanforderungen.

    MySQL gegen andere Datenbanken: Vergleich der OptionenMySQL gegen andere Datenbanken: Vergleich der OptionenApr 15, 2025 am 12:08 AM

    MySQL eignet sich für Webanwendungen und Content -Management -Systeme und ist beliebt für Open Source, hohe Leistung und Benutzerfreundlichkeit. 1) Im Vergleich zu Postgresql führt MySQL in einfachen Abfragen und hohen gleichzeitigen Lesevorgängen besser ab. 2) Im Vergleich zu Oracle ist MySQL aufgrund seiner Open Source und niedrigen Kosten bei kleinen und mittleren Unternehmen beliebter. 3) Im Vergleich zu Microsoft SQL Server eignet sich MySQL besser für plattformübergreifende Anwendungen. 4) Im Gegensatz zu MongoDB eignet sich MySQL besser für strukturierte Daten und Transaktionsverarbeitung.

    Wie wirkt sich die MySQL -Kardinalität auf die Abfrageleistung aus?Wie wirkt sich die MySQL -Kardinalität auf die Abfrageleistung aus?Apr 14, 2025 am 12:18 AM

    Die MySQL -Idium -Kardinalität hat einen signifikanten Einfluss auf die Abfrageleistung: 1. Hoher Kardinalitätsindex kann den Datenbereich effektiver einschränken und die Effizienz der Abfrage verbessern. 2. Niedriger Kardinalitätsindex kann zu einem vollständigen Tischscannen führen und die Abfrageleistung verringern. 3. Im gemeinsamen Index sollten hohe Kardinalitätssequenzen vorne platziert werden, um die Abfrage zu optimieren.

    MySQL: Ressourcen und Tutorials für neue BenutzerMySQL: Ressourcen und Tutorials für neue BenutzerApr 14, 2025 am 12:16 AM

    Der MySQL -Lernpfad umfasst Grundkenntnisse, Kernkonzepte, Verwendungsbeispiele und Optimierungstechniken. 1) Verstehen Sie grundlegende Konzepte wie Tabellen, Zeilen, Spalten und SQL -Abfragen. 2) Lernen Sie die Definition, die Arbeitsprinzipien und die Vorteile von MySQL kennen. 3) Master grundlegende CRUD -Operationen und fortgeschrittene Nutzung wie Indizes und gespeicherte Verfahren. 4) KON -Debugging- und Leistungsoptimierungsvorschläge, wie z. B. rationale Verwendung von Indizes und Optimierungsabfragen. In diesen Schritten haben Sie einen vollen Verständnis für die Verwendung und Optimierung von MySQL.

    Reale MySQL: Beispiele und AnwendungsfälleReale MySQL: Beispiele und AnwendungsfälleApr 14, 2025 am 12:15 AM

    Die realen Anwendungen von MySQL umfassen grundlegende Datenbankdesign und komplexe Abfrageoptimierung. 1) Grundnutzung: Wird zum Speichern und Verwalten von Benutzerdaten verwendet, z. B. das Einfügen, Abfragen, Aktualisieren und Löschen von Benutzerinformationen. 2) Fortgeschrittene Nutzung: Verwandte komplexe Geschäftslogik wie Auftrags- und Bestandsverwaltung von E-Commerce-Plattformen. 3) Leistungsoptimierung: Verbesserung der Leistung durch rationale Verwendung von Indizes, Partitionstabellen und Abfrage -Caches.

    See all articles

    Heiße KI -Werkzeuge

    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.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Wie man alles in Myrise freischaltet
    1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    Sicherer Prüfungsbrowser

    Sicherer Prüfungsbrowser

    Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

    SublimeText3 Linux neue Version

    SublimeText3 Linux neue Version

    SublimeText3 Linux neueste Version

    MantisBT

    MantisBT

    Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

    WebStorm-Mac-Version

    WebStorm-Mac-Version

    Nützliche JavaScript-Entwicklungstools