import { ChevronDown } from 'lucide-react' import { useState } from 'react' import { Button, Collapsible, Select } from 'ui' import throughputTable from '~/data/realtime/throughput.json' export default function RealtimeLimitsEstimater({}) { const findTableValue = ({ computeAddOn, filters, rls, concurrency }) => { return throughputTable.find( (l) => l.computeAddOn === computeAddOn && l.filters === filters && l.rls === rls && l.concurrency === concurrency ) } const [computeAddOn, setComputeAddOn] = useState('micro') const [filters, setFilters] = useState(false) const [rls, setRLS] = useState(false) const [concurrency, setConcurrency] = useState(500) const [limits, setLimits] = useState(findTableValue({ computeAddOn, filters, rls, concurrency })) const [expandPreview, setExpandPreview] = useState(false) const handleComputeAddOnSelection = (e) => { const val = e.target.value setComputeAddOn(val) setConcurrency(500) setLimits(findTableValue({ computeAddOn: val, filters, rls, concurrency: 500 })) } const handleFiltersSelection = (e) => { const val = e.target.value.toLowerCase() === 'true' setFilters(val) setConcurrency(500) setLimits(findTableValue({ computeAddOn, filters: val, rls, concurrency: 500 })) } const handleRLSSelection = (e) => { const val = e.target.value.toLowerCase() === 'true' setRLS(val) setConcurrency(500) setLimits(findTableValue({ computeAddOn, filters, rls: val, concurrency: 500 })) } const handleConcurrencySelection = (e) => { const val = parseInt(e.target.value) setConcurrency(val) setLimits(findTableValue({ computeAddOn, filters, rls, concurrency: val })) } return (

Set your expected parameters

{limits && (

Current maximum possible throughput

Total DB changes /sec Max messages per client /sec Max total messages /sec Latency p95
{limits.maxDBChanges} {limits.maxMessagesPerClient} {Intl.NumberFormat().format(limits.totalMessagesPerSecond)} {limits.p95Latency}ms
)}

View raw throughput table

{throughputTable .map((l) => l.computeAddOn) .filter((v, i, a) => a.indexOf(v) === i) .map((computeAddOn) => (

{computeAddOn === 'micro' ? 'Micro' : computeAddOn === 'small' ? 'Small to medium' : 'Large to 16XL'}

{throughputTable .filter((l) => l.computeAddOn === computeAddOn) .map((l) => ( ))}
Filters RLS Connected clients Total DB changes /sec Max messages per client /sec Max total messages /sec Latency p95
{l.filters ? '✅' : '🚫'} {l.rls ? '✅' : '🚫'} {Intl.NumberFormat().format(l.concurrency)} {l.maxDBChanges} {l.maxMessagesPerClient} {Intl.NumberFormat().format(l.totalMessagesPerSecond)} {l.p95Latency}ms
))}
) }