Maximale Anzahl von Elementen in einer Liste? 5.000 vs 30.000.000

Im Internet findet man dazu gegenläufige Informationen. Was ist denn nun richtig?

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.

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.

teaser

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

Hat dir das gefallen? Vielleicht magst du auch...

Die versteckte SharePoint Benutzerinformationsliste

In einer versteckten Liste speichert SharePoint Informationen über Benutzer

SharePoint Json List Formatting und die nicht existierende WEEKDAY Funktion

Es gibt keine Funktion beim JSON List Formatting, mit der sich der Wochentag berechnen lässt. Man kann ihn aber selbst berechnen.

Quick Tip: Eine Communication Site als Subsite anlegen

Man kann über die UI keine Communication Site als Subsite anlegen. Per Powershell geht es aber problemlos.