Maximale Anzahl von Elementen in einer Liste? 5.000 vs 30.000.000

Maximale Anzahl von Elementen in einer Liste? 5.000 vs 30.000.000

Do. MĂ€rz 16 2023

Wenn wir uns diese “Microsoft Learn”↗ Seite anschauen, dann steht da, dass ich 30 Millionen Elemente in einer Liste, bzw. 30 Millionen Dateien in einer Bibliothek speichern kann.

Super, also kann ich problemlos meine ca. 50.000 Elemente in meiner Liste speichern und damit arbeiten.

So einfach ist das leider nicht, sondern sogar recht kompliziert. Dieses 30-Millionen-Elemente ist wirklich das theoretische maximale Limit fĂŒr Elemente in einer Liste. Du wirst aber in der Praxis vorher schon an andere Limits stoßen.

Generell solltest du dir den folgenden Satz merken

SharePoint ist keine Datenbank

Auch wenn SharePoint und Datenbanken im ersten Moment vielleicht ein paar oberflĂ€chliche Ähnlichkeiten gibt, arbeiten die Systeme im Hintergrund komplett unterschiedlich.

Datenbanken sind auf große Datenmengen und VerknĂŒpfungen zwischen Tabellen ausgelegt. Dinge wie etwa eine Elementhistorie sind hier nicht vorgesehen.

SharePoint auf der anderen Seite sind fĂŒr Zusammenarbeit zwischen Menschen gedacht, also etwa fĂŒr das Erstellen von Aufgabenlisten. Große Datenmengen waren hier nie im Fokus.

Aber schauen wir uns das Thema mal genau an und erzeugen zuerst mal eine Liste mit nur 6000 Elementen. Ich mache das hier per Powershell. Ich fĂŒge auch noch ein weiteres Feld “Even” mit hinzu, in dem ich speichere, ob das Element mit einer geraden Nummer oder einer ungeraden Nummer eingefĂŒgt wurde.

PLAINTEXT
Connect-PnPOnline "https://tenant.sharepoint.com/sites/meineseite" -Interactive
$listTitle="LargeList"

New-PnPList -Title $listTitle -Template GenericList
Add-PnPField -List $listTitle -DisplayName "Even" -InternalName "Even" -Type Boolean

1..6000 |ForEach-Object {
    Add-PnPListItem -List $listTitle -Values @{"Title" = "Item $($_)"; "Even"=(($_ % 2) -eq 0)}
}

Das sieht auf den ersten Blick super aus. Auf den zweiten Blick erkennen wir aber schon einige Probleme. ZunĂ€chst haben wir eine Warnung in den Listeneinstellungen darĂŒber, dass wir mehr als 5000 Elemente in der Liste haben. Wichtiger ist es aber, dass wir die Liste nicht mehr filtern können.

5.000 Elemente in einer Ansicht

Das Problem liegt in der Art und Weise, wie SharePoint Daten aus der “internen” SharePoint Datenbank lĂ€dt. Da man im SharePoint Möglichkeiten hat Daten zu filtern, die es in der unterliegenden Datenbank nicht gibt, macht die SharePoint Applikation dieses selber. Das bedeutet, dass SharePoint zunĂ€chst alle Daten aus seiner Datenbank lĂ€dt und danach im Hauptspeicher des Servers filtert. Dieses Filtern ist aber aufwĂ€ndig und daher auf 5000 Elemente beschrĂ€nkt.

Daher kommt das erste Limit. Man kann zwar viele Elemente im SharePoint speichern, aber maximal 5000 Elemente auf einen Rutsch aus der Liste ausladen.

Um mit mehr Daten in der Liste arbeiten zu können mĂŒssen wir dafĂŒr sorgen, dass unsere erwarteten Ergebnisse schon in den 5000 Elementen sind, die initial vom SharePoint aus der Datenbank ausgeladen werden. Das erreichen wir durch eine geschickte Kombination von Indices und der Formulierung der Abfrage.

Über einen Index können wir die Elemente schon in der Datenbank des SharePoint filtern, bevor sie in den SharePoint geladen werden. Dazu gehen wir in die Listeneinstellungen, klicken auf “Indizierte Spalten” und fĂŒgen eine neue Spalte als Index hinzu. Wir können sogar zwei Spalten in einem Index verbinden.

Das können wir in unserem Beispiel etwa mit der “Even” Spalte machen. Darin sind 3000 Elemente mit “true” und 3000 Elemente mit “false” enthalten. Jede der Teilsummen ist kleiner als 3000 Elemente. Wenn wir nun zuerst nach “Even” filtern und danach nach einem anderen Wert können wir auch eine Liste mit mehr als 5000 Elementen filtern.

Das Vorgehen muss aber geplant werden. Wenn wir etwa eine Liste mit 50.000 Elementen haben, dann brauchen einen komplexeren Index. Zum Beispiel können wir ein Feld “Quartal” einfĂŒhren, in dem wir eine Kombination aus “Quartal” und “Jahr” (z.B. “2023/1”) speichern. Je nach unserem Anwendungsfall haben wir vielleicht weniger als 5000 Elemente pro Quartal. Wenn dieses Feld nun im Index ist, dann können wir zuerst nach den Quartal und dann danach nach unseren anderen Werten filtern.

Problematischer wird es, wenn wir mehr als 5000 Elemente in einem Rutsch aus einer Liste laden wollen. Ein Anwendungsfall wĂ€re es etwa, wenn ich alle Elemente einer Liste exportieren möchte. Das mĂŒssen wir in mehreren Abfragen mittels eines Index machen und dann die Ergebnisse wieder zusammensetzen. Dazu gibt es aber in der OberflĂ€che keine einfache Möglichkeit und wir mĂŒssten etwas programmieren.

100.000 Elemente

Je mehr Elemente ich in einer Liste habe, desto mehr FunktionalitĂ€ten werden out-of-the-box nicht mehr so funktionieren, wie sie mit weniger als 5000 Elementen funktionieren wĂŒrden. Ein weiteres Beispiel dafĂŒr sind Berechtigungen auf einzelnen Elementen.

Bei wenigen Elementen in einer Liste kann ich problemlos einem einzelnen Element andere Berechtigungen geben, als den anderen. Beispielsweise könnte ich ein einzelnes Element nur fĂŒr Mitglieder einer Abteilung sichtbar machen.

Je mehr ich diese Einzel-Element Berechtigungen aber benutze und je mehr Elemente ich in meiner Liste habe, desto weniger gut wird das funktionieren. Zum einen werden mit die Berechtigungen die korrekte Erstellung von Indices schwieriger machen, zum andern wird das Laden von Elementen aus meiner Liste langsamer und langsamer werden, je mehr Einzelberechtigungen ich benutze. Bei 100.000 Elementen in einer Liste funktionieren Einzelberechtigungen gar nicht mehr.

Ich persönlich empfehle euch, generell wenige Einzelberechtigungen auf Listen zu verwenden. Am besten erstellt ihr mehrere Listen und berechtigt die kompletten Listen fĂŒr verschiedene Berechtigungsgruppen und verschiebt die Elemente zwischen diesen Listen. Das hilft auch gleichzeitig dabei, die Anzahl der Elemente in den Listen klein zu halten.

30.000.000 Elemente

Das ist die wirklich theoretische Maximalanzahl von Elementen in einer Liste. Rein praktisch werdet ihr niemals an diesen Wert kommen, sondern schon viel, viel frĂŒher an etwas anderem scheitern