Nicht create index in mongodb "- Taste zu groß, um index"
Ich Schaffe index in mongodb mit 10 Millionen Datensätze aber folgenden Fehler
db.logcollection.ensureIndex({"Module":1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"ok" : 0,
"errmsg" : "Btree::insert: key too large to index, failing play.logcollection.$Module_1 1100 { : \"RezGainUISystem.Net.WebException: The request was aborted: The request was canceled.\r\n at System.Net.ConnectStream.InternalWrite(Boolean async, Byte...\" }",
"code" : 17282
}
Bitte helft mir, wie createindex in mongodb,
InformationsquelleAutor der Frage Sandeep.maurya | 2015-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
MongoDB wird nicht erstellen Sie einen index für eine Sammlung, wenn der index-Eintrag für ein vorhandenes Dokument überschreitet die index-Taste begrenzen (1024 bytes). Sie können jedoch erstellen ein Hash-index oder text-index statt:
oder
InformationsquelleAutor der Antwort anhlc
Können Sie die Stille dieses Verhalten durch die Einführung mongod-Instanz mit folgendem Befehl:
oder durch Ausführung des folgenden Befehls von mongoShell
Wenn Sie gewährleistet, dass sich Ihr Gebiet überschreiten die Grenze sehr selten, dann
eine Möglichkeit, dieses Problem zu lösen ist, indem Sie das Feld (das bewirkt, dass der index out of limit) in teilen von Bytelänge < 1KB z.B. für Feld
val
würde ich es aufgeteilt in ein Tupel von Feldernval_1
,val_2
und so weiter. Mongo speichert text als utf-8 mit gültigen Werten. Es bedeutet, dass Sie eine Funktion benötigen, teilen utf-8-Zeichenfolgen ordnungsgemäß.Dann definieren Sie Ihre zusammengesetzte index:
oder mehrere Indizes pro
val_i
:In allen anderen Fällen verwenden Sie entweder hash oder text Indizes.
InformationsquelleAutor der Antwort Rustem K
Als andere Menschen, hat darauf hingewiesen, die Antworten, der Fehler
key too large to index
bedeutet, dass Sie versuchen, erstellen Sie einen index auf Feld oder die Felder, größer als 1024 bytes Länge.In ASCII-Begriffe, 1024 bytes, die typischerweise übersetzt, um etwa 1024 Zeichen lang sein.
Es ist keine Lösung für diese, da dies eine intrinsische Grenze gesetzt von MongoDB wie bereits in MongoDB Grenzen und Schwellen Seite:
Einschalten des
failIndexKeyTooLong
Fehlers keine Lösung ist, wie erwähnt, in server-Parameter Handbuch-Seite:Was dieser Satz bedeutet, ist, dass das problematische Dokument wird nicht in den index aufgenommen werden und fehlen möglicherweise die Abfrage-Ergebnisse.
Beispiel:
Zwingt und MongoDB zu ignorieren, die
failIndexKeyTooLong
Fehler, der letzten Abfrage nicht enthalten das problematische Dokument (d.h. das Dokument mit_id: 2
fehlen, ist das Ergebnis), also die Abfrage ergab das falsche Ergebnis gesetzt.InformationsquelleAutor der Antwort Kevin Adistambha
Beim laufen in die " index-Taste begrenzen " die Lösung hängt von den Bedürfnissen der Ihr schema. In extrem seltenen Fällen, Schlüssel passenden auf einen Wert von > 1024 bytes ist eine design-Anforderung. In der Tat, fast alle Datenbanken Einführung einer index-Taste limit-Einschränkung, aber in der Regel etwas konfigurierbar im legacy-relationale DBs (Oracle/MySQL/PostgreSQL), so dass Sie leicht zu Schießen selbst in den Fuß.
Für die schnelle Suche, ein "text" - index dient der Optimierung der Suche und pattern-matching auf lange Textfelder, und ist gut geeignet, um die use-case. Aber, mehr allgemein, eine Eindeutigkeit, die auf einen langen text Werte ist eine Voraussetzung. Und "text" - Indizes Verhalten sich nicht wie einen eindeutigen skalaren Wert mit dem unique-flag gesetzt
{ unique: true }
(mehr wie ein array von Zeichenfolgen in das Feld).Inspiriert von MongoDb GridFS ist, uniqueness-Prüfungen können leicht implementiert werden, indem ein "md5" - Feld, um das Dokument und die Erstellung einer eindeutigen skalaren index auf. In der Art, wie Sie einen benutzerdefinierten eindeutigen Hash-index. Dies ermöglicht eine nahezu unbegrenzte (~ 16 MB) text Feld der Länge, dass ist indiziert für die Suche und einzigartig in der Sammlung.
InformationsquelleAutor der Antwort JoelABair