GEMESSEN.
NICHT BEHAUPTET.
Jede Zahl hier stammt aus einem Lauf auf einer benannten Maschine gegen generierte Daten. Was dabei kaputtgegangen ist, steht ebenfalls auf der Seite — im selben Schriftgrad wie das, was funktioniert hat.
WAS DAS ZEIGT.
HubSpots Standardgrenze liegt bei 15.000.000 Datensätzen je Objekt. Wir haben jetzt ein Blatt mit 16.000.000 Kontakten auf einer kleinen Zwei-Kern-Maschine gefahren, und auf einem Entwickler-Laptop, und jeder Schritt lief durch. Jeden einzelnen Datensatz zu erreichen — den ersten, den letzten, die Mitte einer sortierten Ansicht — bleibt zwischen 7 und 42 ms, und der Browser belegt dabei 11 bis 17 MB.
Das ist die Schlagzeile, und sie hat eine Form. Alles, was einen Datensatz betrifft, bleibt im Millisekundenbereich. Alles, was über alle sechzehn Millionen rechnet, braucht echte Zeit: ein vollständiger Sortierlauf dauert 75 Sekunden. Beide Zahlen stehen auf dieser Seite, denn eine Seite, die nur die erste Sorte zeigt, ist ein Prospekt.
Zwei Dinge sind dabei kaputtgegangen, und wir haben beide veröffentlicht, solange sie kaputt waren. Beide sind jetzt behoben, und die Absätze, die das sagten, sind umgeschrieben statt gelöscht — Sie sehen also, was dort vorher stand. Einen Preis von einem Defekt zu unterscheiden, ist das meiste, wofür eine Benchmark gut ist; die Liste steht unten.
ZWEI MASCHINEN.
Beides sind Einzelnutzer-Entwicklungsumgebungen, keine Produktionsserver. Maschine A ist die interessante: ein kleiner Container, wie ihn eine bescheidene Self-Hosted-Installation betreibt. Die kleine Maschine ist die stärkere Geschichte — deshalb stammen die meisten Zahlen hier von ihr.
| A — Build-Container | B — Entwickler-Laptop | |
|---|---|---|
| CPU | 2 virtuelle Kerne | 8 Kerne |
| Arbeitsspeicher | 7 GB | 39 GB |
| Aufbau | Linux, Datenbank auf demselben Host | Windows-Laptop, Datenbank im Container, über Netzwerk |
| Daten | 16.000.000 generierte Kontakte, 15 Spalten | dieselben |
Maschine B hat mehr Hardware und einen längeren Weg zu ihrer Datenbank und ist deshalb nicht durchgängig schneller — bei der schwereren Arbeit braucht sie das 1,0- bis 1,8-Fache des kleinen Containers. Wo die beiden sich um mehr als Messrauschen unterscheiden, stehen beide Werte.
Die Daten sind generiert: Kontaktdatensätze mit den Spalten, die ein echter trägt, Text statt Zahlen, einschließlich der Compliance-Felder. Es wurden keine Kundendaten und keine personenbezogenen Daten verwendet oder gemessen.
AN DER EXCEL-GRENZE.
Vor den großen Größen der gewöhnliche Fall: ein zwölfspaltiges Blatt, vollständig im Browser gehalten. „Änderung p95“ ist das 95. Perzentil aus 200 Einzelzellen-Änderungen, jede samt erneutem Lesen des Bildschirms.
| Zeilen | Maschine | Laden | Erster Bildschirm | Sortieren (Text) | Filtern | Änderung p95 | Speicher |
|---|---|---|---|---|---|---|---|
| 100.000 | A | 0,7 s | 47 ms | 0,35 s | 0,03 s | 0,1 ms | 83 MB |
| 500.000 | A | 4,6 s | 43 ms | 1,9 s | 0,07 s | 0,1 ms | 382 MB |
| 1.048.575 | A | 9,0 s | 53 ms | 4,1 s | 0,14 s | 0,1 ms | 793 MB |
| 1.048.575 | B | 9,7 s | 32 ms | 4,4 s | 0,15 s | 0,1 ms | 797 MB |
1.048.575 Zeilen sind exakt die Grenze einer Tabelle und der Punkt, an dem die meisten Werkzeuge stattdessen eine Seitenblätterung anbieten. Eine Zelle zu ändern hängt überhaupt nicht von der Größe ab; der erste Bildschirm ist bei jeder Größe in unter 60 ms lesbar, die Arbeit beginnt also, bevor das Laden fertig ist.
Beachten Sie die Speicherspalte: 793 MB, um eine Million Zeilen im Browser zu halten. Behalten Sie das für den nächsten Abschnitt im Kopf, in dem das Sechzehnfache an Daten ein Fünfzigstel davon braucht.
EIN FALL, DER BEIDE KANTEN BERÜHRT.
Testgrößen sind meist runde Zahlen, die jemandem gefielen. Diese nicht. Sie stammt aus einem Kundenbindungsprogramm — der Art von Konto, in der die Volumen-Kante und die Datenschutz-Kante gleichzeitig greifen, und in der drei verschiedene Werkzeuge aus je einem anderen Grund aufgegeben haben.
Ein Loyalty-Programm ist eine lange Liste von Menschen und eine sehr viel längere Liste dessen, was diese Menschen getan haben. Das Volumen sind nicht die Mitglieder, sondern jede Interaktion, die an ihnen hängt. Und weil es im Kern um Verhalten geht, trägt jedes dieser Mitglieder eine Einwilligung, einen Zweck, eine Aufbewahrungsfrist — und jederzeit die Möglichkeit, Sie zu bitten, alles davon zu löschen.
Berührt man eine der beiden Kanten, lautet die übliche Antwort: das Problem auf mehrere Werkzeuge verteilen. Berührt man beide, fangen die Teile an, einander zu widersprechen. Das System, das das Volumen hält, ist nicht das, das die Einwilligung hält — und der Export, der beide verbindet, ist das, was man einer Aufsichtsbehörde nur ungern beschreibt.
| Werkzeug | Woran es endet | Wo das liegt |
|---|---|---|
| Airtable | Datensätze je Base | 50.000 bei Team, 125.000 bei Business, 500.000 bei Enterprise Scale |
| Eine Tabelle | Zeilen je Blatt | 1.048.576 — und es ist eine Liste, keine Menge verbundener Datensätze |
| HubSpot | nicht an Datensätzen (15.000.000) — an Verknüpfungen und Feldern | 50.000 Verknüpfungen je Datensatz, 1.000 eigene Eigenschaften je Objekt |
Drei Decken, drei verschiedene Arten. Die erste stoppt Sie über die Anzahl. Die zweite hält die Anzahl, plättet aber die Beziehungen. Die dritte trägt die Anzahl mühelos und wird eng, sobald jedes Mitglied Tausende Interaktionen hinter sich hat — oder Ihr Programm mehr als tausend Felder braucht, um eine Stufe zu beschreiben.
Jenes Konto hält zehn Millionen Datensätze. Als wir diese Seite zum ersten Mal veröffentlicht haben, waren vier gemessen. Inzwischen sind es sechzehn — über dem Konto, und über der höchsten der drei Decken.
Die Form dieses Tests ist echt. Die Daten darin sind es nicht. Wir haben die Form jenes Kontos genommen — das Volumen, das Verhältnis von Interaktionen zu Mitgliedern, die Compliance-Felder, die ein Loyalty-Programm tragen muss — und alles, worauf wir gemessen haben, generiert. Es wurden keine Kundendaten und keine personenbezogenen Daten verwendet. Auch deshalb steht auf dieser Seite eine Zahl und kein Logo.
SECHZEHN MILLIONEN KONTAKTE.
Jeder Schritt jedes Laufs unten ist fehlerfrei durchgelaufen, auf beiden Maschinen. HubSpots Standardgrenze liegt bei 15.000.000 Datensätzen je Objekt, höhere Stufen gibt es gegen Aufpreis; dies sind 16.000.000.
| 4 Mio. · A | 10 Mio. · A | 16 Mio. · A | 16 Mio. · B | |
|---|---|---|---|---|
| Erste Zeilen / Sprung zum letzten Datensatz | 9 / 7 ms | 16 / 14 ms | 10 / 7 ms | 12 / 10 ms |
| Sprung in die Mitte / ans Ende der sortierten Ansicht | 6 / 10 ms | 15 / 9 ms | 15 / 19 ms | 12 / 12 ms |
| Eine Zelle speichern / Änderungen anderer holen | 10 / 2 ms | 16 / 3 ms | 16 / 2 ms | 14 / 5 ms |
| Alle Datensätze nach Nachname sortieren | 16,2 s | 44,2 s | 75,0 s | 80,8 s |
| Nach Land filtern, angezeigte Datensätze | 4,3 s · 400.000 | 10,9 s · 1.000.000 | 18,8 s · 1.600.000 | 19,3 s · 1.600.000 |
| Anzahl pro Land über alle Datensätze | 6,8 s | 16,9 s | 27,3 s | 40,5 s |
| Liste mit 50.000 Empfängern bauen | 3,8 s | 4,9 s | 5,2 s | 9,3 s |
Die Form ist der Punkt. Einen Datensatz zu erreichen kostet bei sechzehn Millionen dasselbe wie bei vier — ein Sprung über das ganze Blatt ist ein Bildlauf um einen Schirm. Arbeit, die über jeden Datensatz rechnet, wächst ungefähr proportional zu den Daten, und wir veröffentlichen das, statt es wegzurunden.
Einmal deutlich gesagt, weil die Zahlen zur falschen Lesart einladen: Dass ein Sortierlauf über sechzehn Millionen 75 Sekunden dauert, ist kein Mangel. Es sind sechzehn Millionen Vergleiche auf zwei virtuellen Kernen. Das bekommt man nirgends geschenkt — und sonst veröffentlicht niemand, was es ihn kostet.
Zur Einordnung: Das alles zu halten brauchte rund 7 GB Datenbankspeicher, und es anzulegen dauerte auf Maschine A knapp drei Minuten.
DER BROWSER WÄCHST NICHT MIT IHREN DATEN.
Nicht der Server im Selbstgespräch — ein echter Browser bedient das Blatt, drei Läufe auf Maschine A, Median angegeben. Dasselbe Skript ist inzwischen auch auf dem Laptop gelaufen und landet im selben Bereich. Die Speicherzahl ist die, die man behalten sollte.
| Schritt | Median aus drei Läufen |
|---|---|
| Das Blatt öffnen, bis der erste Datensatz auf dem Schirm ist | 1.256 ms |
| Ende-Taste, zu Datensatz 16.000.000 | 312 ms |
| 200 Seitensprünge, dann Sprung auf Datensatz 8.000.000 | 1.622 ms |
| Ende-Taste in der sortierten Ansicht | 238 ms |
| JavaScript-Speicher nach dem Öffnen | 12,0 MB |
| … nach dem Blättern und dem Sprung | 15,9 MB |
| … mit geladener sortierter Ansicht | 16,4 MB |
Sechzehn Millionen Datensätze, und der Tab belegt rund sechzehn Megabyte. Zum Vergleich: 793 MB kostet eine einzige Million, wenn der Browser das ganze Blatt trägt. Ihr Laptop hört auf, eine Funktion davon zu sein, wie viele Daten Ihr Unternehmen hat.
Auf dem Laptop ergab derselbe Lauf 11,4 bis 15,8 MB, das Blatt offen in 1,4 s und die Ende-Taste bei 365 ms — dasselbe Bild auf anderer Hardware, und genau dafür fährt man es zweimal.
Die Ausnahme ist das Sortieren, und das sind die 75 Sekunden des Servers, nicht die des Browsers; der Browser legt eine Zehntelsekunde darauf.
KEINE LISTE OHNE PRÜFUNG.
Eine Empfängerliste entsteht nicht von Hand. Sie entsteht ausschließlich über den Versandschritt, und der prüft jeden einzelnen Datensatz gegen Ihre eigenen Regeln — nach demselben Maßstab, ob die Liste tausend Datensätze umfasst oder sechzehn Millionen.
| 1 Mio. · A | 4 Mio. · A | 16 Mio. · A | 16 Mio. · B | |
|---|---|---|---|---|
| Jeden Datensatz prüfen | 2,1 s | 7,4 s | 38,1 s | 55,7 s |
| Über der Grenze: verweigert und protokolliert | 2,0 s | 7,5 s | 40,8 s | 64,1 s |
| Eine gefilterte Ansicht mit 1.600.000 Kontakten prüfen | 1,2 s | 4,4 s | 10,5 s | - |
Eine Liste fasst bis 100.000 Empfänger. Eine größere wird verweigert, und die Verweigerung wird als Ereignis festgehalten — eine Verweigerung, die Sie nächstes Jahr vorzeigen können, ist mehr wert als eine, die bloß stattgefunden hat.
Die letzte Zeile war einmal die, die nicht stimmig aussah. Als wir diese Seite zum ersten Mal veröffentlicht haben, dauerte das Prüfen einer gefilterten Ansicht 84 Sekunden — neunzehnmal langsamer bei viermal so vielen Daten, und dreimal schneller auf anderer Hardware. Wir haben geschrieben, dass das ein Defekt ist und kein Preis, dass er nicht behoben ist, und haben es stehen lassen. Jetzt ist er behoben: dieselbe Prüfung über 1.600.000 Kontakte dauert 10,5 Sekunden.
Die Prüfung liest Ihre eigenen Regeln. Sie ist keine Rechtsberatung und ersetzt weder Sperrlisten noch Opt-outs noch eine Kanal-mal-Land-Policy. Heute erzeugt sie eine Datei mit Protokolleintrag; channelSENDER versendet über die freigegebenen Listen1 — als erstes Modul auf Podma.
¹ Geplant für das nächste Release.
400.000 ZEILEN, VOLL GEPRÜFT.
Ein CRM besteht überwiegend aus Beziehungen, und genau dort geben Werkzeuge still auf. Nichts hier nimmt eine Abkürzung: Jeder geschriebene Datensatz wird auf dem Weg hinein geprüft, zugeordnet und protokolliert.
| Maschine A | Maschine B | |
|---|---|---|
| 100.000 Prospects + 100.000 Projekte + 200.000 Beziehungen, voll geprüft | 32,8 s | — |
| Prospects-Blatt öffnen / erster Bildschirm | 1,2 s / 80 ms | 2,3 s / 191 ms |
| Autosave einer Zelle | 6 ms | 16 ms |
| Prüfung auf Änderungen anderer | 1 ms | 4 ms |
| Einen Datensatz samt Beziehungen aus den Blättern entfernen (vorher 148 s) | 16 ms | 26–107 ms |
Die Identität eines Datensatzes vergibt das System und verwendet sie nie erneut, jedes Feld wird validiert, jede Beziehung gegen einen tatsächlich existierenden Datensatz geprüft, und jeder Speichervorgang hinterlässt einen Eintrag, den Sie ein Jahr später lesen können. Das Laden wird nicht langsamer, während sich die Blätter füllen — die letzten hunderttausend Datensätze kommen so schnell wie die ersten.
Die letzte Zeile beschreibt, einen Datensatz aus den Blättern zu entfernen, und wird genau so zitiert. Ob eine Person vollständig aus dem System verschwinden kann, ist eine andere Frage — siehe Was als Nächstes kommt.
VORN — UND WO NICHT.
Die HubSpot-Werte sind Account-Grenzen aus deren eigener Dokumentation, abgerufen am 30. September 2026. Unsere sind das Gemessene. Beides beantwortet unterschiedliche Fragen und wird hier auch so dargestellt.
| HubSpot | Podma | |
|---|---|---|
| Datensätze je Objekt | 15.000.000 Standardgrenze; mehr gegen Aufpreis | 16.000.000 gemessen auf einer kleinen 2-vCPU-Maschine |
| Beziehungen je Datensatz | 50.000 | keine Obergrenze |
| Eigenschaften / Spalten je Objekt | 1.000 benutzerdefiniert | 16.384 |
| Eigene Objekte | 20 (Enterprise) | über die Registry definiert, keine feste Zahl |
| Der Datensatz nach dem Abschluss | endet bei Closed Won | ein Projekt, mit Vertrag, AVV und Aufbewahrung |
Die erste Zeile ist die, die wir einen Monat lang nicht behauptet haben. Sie ist jetzt eine Messung, auf beiden Maschinen — und sie steht mit der Maschine da, weil eine Zahl ohne Maschine Marketing ist. Lesen Sie sie genau: mehr als HubSpots Standardgrenze je Objekt, nicht mehr als HubSpot. Dort gibt es höhere Stufen gegen Aufpreis, und ein Satz, der das unterschlägt, wird von einem Wettbewerber vor Ihrem Kunden korrigiert.
Was sie nicht bedeutet: dass jeder Teil des Produkts sich bei dieser Größe wohlfühlt. Davon handelt der nächste Abschnitt.
Quellen: HubSpot-Entwicklerdokumentation, Limits-Tracking-API, der HubSpot Product & Services Catalog und die Airtable-Tarifübersicht.
WAS KAPUTTGING — UND WAS DAS NICHT IST.
- Die Startseite ist hier zerbrochen, und sie ist repariert. Bei sechzehn Millionen Datensätzen las sie zu viel auf einmal und hat den Server mitgenommen. Heute öffnet sie dieses Konto in 8,4 Sekunden auf zwei virtuellen Kernen — und genau so viel kostet es, sechzehn Millionen Datensätze von der Platte zu zählen. Das ist der Preis dafür, bei der Ankunft zu zählen; bei der Ankunft nicht mehr zu zählen ist der nächste Schritt. Wir veröffentlichen die Zahl, weil sie die langsamste auf dieser Seite ist — nicht, weil wir sie für eine schlechte halten.
- Der zweite Defekt ist ebenfalls behoben. Eine gefilterte Ansicht darauf zu prüfen, wer kontaktiert werden darf, dauerte 84 Sekunden, als diese Seite online ging; jetzt sind es 10,5 über 1.600.000 Kontakte. Keiner der beiden Sätze ist still verschwunden — beide stehen oben umgeschrieben und tragen weiterhin, was sie vorher sagten.
- Nicht mehr Datensätze je Objekt, als HubSpot verkaufen kann. 16.000.000 liegen über deren Standardgrenze von 15.000.000, nicht über den höheren Stufen, die es dort gegen Aufpreis gibt. Die ehrliche Aussage lautet „mehr als die Standardgrenze", mit der Maschine.
- Keine Produktion, kein Mehrbenutzerbetrieb. Jeder Wert hier stammt aus dem Einzelnutzerbetrieb auf einer Entwicklungsmaschine. Gleichzeitige Last ist ungemessen.
- Keine gemessene Zeit in anderer Bedeutung. Die 16 ms oben entfernen einen Datensatz aus den Blättern. Das Änderungsprotokoll hält weiterhin, was die Werte waren — diese Zahl ist also keine Aussage darüber, eine Person zu löschen. Siehe das Angekündigte unten.
- Keine von der Datenbank erzwungene Mandantentrennung. Heute ist jede Anfrage und jeder Schreibvorgang in der Anwendung auf seinen Mandanten begrenzt, und jede protokollierte Änderung nennt ihn. Die Durchsetzung in der Datenbank selbst steht unten als Ankündigung, nicht hier als Behauptung.
- Keine echten Daten. Alles ist generiert. Es wurden keine Kundendaten und keine personenbezogenen Daten verwendet oder gemessen.
- Nichts gerundet. 16.000.000 sind 16.000.000. Wo ein Wert zwischen den Maschinen schwankt, stehen beide statt eines Mittelwerts.
Wenn eine Zahl hier für eine Entscheidung zählt, die Sie treffen: Messen Sie selbst nach. Fragen Sie, und Sie bekommen die Rohausgabe — oder eine Sitzung auf Ihrem eigenen Export.
WAS ALS NÄCHSTES KOMMT.
Vier der Grenzen oben schließen sich. Die Konzepte stehen, die Releases sind geplant — deshalb stehen sie hier als das, was CMP42 tut, mit der Fußnote bis zu dem Tag, an dem sie laufen.
- Löschung, die den Audit-Trail erreicht.1 Personenbezogene Werte im Änderungsprotokoll liegen je Person verschlüsselt; eine Löschung vernichtet den Schlüssel dieser Person. Das Protokoll bleibt prüfbar, die Werte hören auf, lesbar zu sein.
- Aufbewahrung und Legal Hold, erzwungen.1 Eine Entfernung wird verweigert, solange ein Legal Hold gesetzt ist oder eine Aufbewahrungsfrist in der Zukunft liegt.
- Mandantentrennung, von der Datenbank erzwungen.1 Nicht nur von der Anwendung, die sie abfragt — damit auch ein Fehler in der Anwendung die Grenze nicht überschreiten kann.
- Zugriffskontrolle pro Model, Felder je Rolle maskiert.1 Eine Rolle kann einen Kontakt lesen, während die Telefonnummer verborgen bleibt.
¹ Geplant für das nächste Release.
Keines davon hat auf dieser Seite eine Zahl, weil ein Plan keine Messungen erzeugt. Mit dem jeweiligen Release fällt die Fußnote von der Aussage — und der Satz, der ihr Fehlen beschreibt, fällt in derselben Änderung von der Seite.
GLAUBEN SIE UNS NICHT EINFACH.
Eine Benchmark, die man nicht befragen kann, ist ein Prospekt. Fragen Sie, und Sie bekommen den Rest unter NDA — denn was hinter diesen Zahlen steht, ist das Produkt.
- Die Rohausgabe jedes Laufs, der auf dieser Seite zitiert wird, mit Zeitstempel und der Maschine, von der er stammt.
- Eine Sitzung auf Ihren eigenen Daten. Bringen Sie einen Export Ihres größten Objekts mit, und wir fahren dieselben Messungen dagegen, während Sie zusehen.
- Die Messungen, die wir nicht veröffentlicht haben — auch die, die uns nicht geschmeichelt haben.
- Eine klare Antwort darauf, wo es bricht. Zwei dieser Antworten stehen bereits auf dieser Seite, beide binnen eines Tages nach der Veröffentlichung behoben — und weiterhin in der Form lesbar, die sie hatten, als sie noch zutrafen. Es gibt mehr.
- Und eine offene Einladung. HubSpot können wir in dieser Größe nicht selbst messen: Dafür bräuchte es einen Account mit sechzehn Millionen Datensätzen, und wer einen hat, darf vermutlich nicht veröffentlichen, was er leistet. Bringen Sie einen großen mit, fahren wir den Vergleich gemeinsam — und veröffentlichen, was dabei herauskommt, auch die Teile, die nicht für uns sprechen.
Design Partner bekommen das im ersten Gespräch, nicht als Gefallen. Zwölf Plätze, sechs Monate, und Ihr Preis bleibt Ihrer →