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.
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