diff --git a/src/components/home-next/NavbarNext.tsx b/src/components/home-next/NavbarNext.tsx index 881c1b81b964e..996e59b261e33 100644 --- a/src/components/home-next/NavbarNext.tsx +++ b/src/components/home-next/NavbarNext.tsx @@ -36,7 +36,7 @@ function buildNavItems(docsHref: string, releasesHref: string): NavItem[] { label: 'Why Doris', items: [ { label: 'Doris vs. Others', href: '/why-doris/compare' }, - { label: 'Benchmarks (coming soon)', href: '#' }, + { label: 'Benchmarks', href: '/why-doris/benchmarks' }, { label: 'Key Features', href: '/why-doris/key-features' }, { label: 'User Stories (coming soon)', href: '#' }, ], diff --git a/src/components/why-doris-next/BenchmarkNext.scss b/src/components/why-doris-next/BenchmarkNext.scss new file mode 100644 index 0000000000000..9a432ae36d7c6 --- /dev/null +++ b/src/components/why-doris-next/BenchmarkNext.scss @@ -0,0 +1,1290 @@ +// Benchmark landing page — fully scoped under `.bench-next` so the prototype's +// `b-*` selectors don't collide with the rest of the site. + +.bench-next { + // ── Tokens (mirrors prototype/v14-benchmark/tsx/src/styles/_tokens.scss) + --bn-green: #11A679; + --bn-green-deep: #0B7A58; + --bn-green-dark: #06805F; + --bn-green-darker: #054C39; + --bn-green-darkest: #033A2C; + --bn-green-tint: #1FBF8E; + --bn-green-glow: #2DDFA8; + + --bn-cream: #F5EFE4; + --bn-cream-light: #FAF6EE; + --bn-cream-warm: #EFE6D2; + --bn-paper: #FFFCF5; + + --bn-yellow: #FFD23F; + --bn-yellow-bright: #FFE066; + --bn-coral: #FF5C39; + + --bn-ink: #0F1A14; + --bn-ink-soft: #1B2A22; + + --bn-mono: 'JetBrains Mono', 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + --bn-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + + --bn-container: 1320px; + --bn-gutter: 56px; + + position: relative; + background: var(--bn-green-dark); + color: var(--bn-cream-light); + font-family: var(--bn-sans); + overflow-x: hidden; + + * { box-sizing: border-box; } + + img { max-width: 100%; display: block; } + a { color: inherit; } + + // ── Layout helpers + .b-container { + max-width: var(--bn-container); + margin: 0 auto; + padding: 0 var(--bn-gutter); + width: 100%; + } + + .b-accent { color: var(--bn-yellow); } + + .b-eyebrow { + display: inline-flex; + align-items: center; + gap: 12px; + font-family: var(--bn-mono); + font-size: 12px; + font-weight: 500; + letter-spacing: 0.14em; + text-transform: uppercase; + color: rgba(245, 239, 228, 0.7); + flex-wrap: wrap; + } + + .b-eyebrow-line { + display: inline-block; + width: 28px; + height: 1.5px; + background: var(--bn-yellow); + flex-shrink: 0; + } + + .b-btn { + display: inline-flex; + align-items: center; + gap: 0.6rem; + padding: 0.95rem 1.5rem; + font-family: var(--bn-mono); + font-size: 14px; + font-weight: 600; + letter-spacing: 0.04em; + text-transform: uppercase; + border-radius: 4px; + border: 1.5px solid transparent; + cursor: pointer; + transition: transform 0.15s ease, background 0.15s ease, border-color 0.15s ease; + text-decoration: none; + white-space: nowrap; + + &:hover { + transform: translateY(-1px); + text-decoration: none; + } + } + + .b-btn-yellow { + background: var(--bn-yellow); + color: var(--bn-ink); + border-color: var(--bn-yellow); + + &:hover { background: var(--bn-yellow-bright); } + } + + .b-btn-primary { + background: var(--bn-cream-light); + color: var(--bn-green-darker); + border-color: var(--bn-cream-light); + + &:hover { background: var(--bn-paper); } + } + + .b-btn:disabled, + .b-btn[aria-disabled='true'] { + cursor: not-allowed; + opacity: 0.55; + + &:hover { + transform: none; + background: var(--bn-cream-light); + } + } + + .b-shape { + position: absolute; + pointer-events: none; + z-index: 1; + } + + .b-shape-diamond { + width: 16px; + height: 16px; + background: var(--bn-yellow); + transform: rotate(45deg); + } + + .b-shape-circle { + width: 14px; + height: 14px; + border-radius: 50%; + background: var(--bn-coral); + } + + .b-shape-ring { + width: 22px; + height: 22px; + border-radius: 50%; + border: 2px solid var(--bn-yellow); + } + + .b-shape-cross { + width: 18px; + height: 18px; + position: absolute; + + &::before, + &::after { + content: ''; + position: absolute; + background: var(--bn-cream-light); + inset: 0; + } + + &::before { + width: 100%; + height: 2px; + top: 50%; + transform: translateY(-50%); + } + + &::after { + height: 100%; + width: 2px; + left: 50%; + transform: translateX(-50%); + } + } + + // ── Reveal-on-scroll + [data-reveal], + [data-reveal-local] { + opacity: 0; + transform: translateY(24px); + transition: + opacity 0.7s cubic-bezier(.2, .8, .2, 1), + transform 0.7s cubic-bezier(.2, .8, .2, 1); + + &.is-visible { + opacity: 1; + transform: none; + } + } + + [data-reveal-delay='1'] { transition-delay: 0.08s; } + [data-reveal-delay='2'] { transition-delay: 0.16s; } + [data-reveal-delay='3'] { transition-delay: 0.24s; } + + // ───────────────────────────────────────────────────────────────────────── + // Hero + // ───────────────────────────────────────────────────────────────────────── + .b-hero { + position: relative; + background: var(--bn-green-dark); + overflow: hidden; + padding: 72px 0; + + .b-hero-inner { position: relative; z-index: 5; } + + .b-hero-title { + font-family: var(--bn-mono); + font-weight: 700; + text-transform: uppercase; + letter-spacing: -0.035em; + word-spacing: -0.18em; + line-height: 0.92; + color: var(--bn-cream-light); + margin: 0; + font-size: clamp(40px, 4.4vw, 62px); + + .b-accent { color: var(--bn-yellow); } + } + + .b-hero-sub { + font-family: var(--bn-sans); + font-size: 15px; + line-height: 1.5; + word-spacing: -0.12em; + color: rgba(245, 239, 228, 0.85); + margin: 18px 0 0; + max-width: 540px; + font-weight: 400; + } + + .b-hero-link { + color: var(--bn-cream-light); + text-decoration: none; + border-bottom: 1px solid rgba(255, 210, 63, 0.45); + padding-bottom: 1px; + transition: color 0.15s ease, border-color 0.15s ease; + + &:hover { + color: var(--bn-yellow); + border-bottom-color: var(--bn-yellow); + text-decoration: none; + } + } + } + + // ───────────────────────────────────────────────────────────────────────── + // Comparison + // ───────────────────────────────────────────────────────────────────────── + .b-cmp { + background: var(--bn-cream-light); + color: var(--bn-ink); + padding: 72px 0; + position: relative; + overflow: hidden; + + .b-cmp-bggrid { + position: absolute; + inset: 0; + background-image: radial-gradient(rgba(15, 26, 20, 0.07) 1.2px, transparent 1.2px); + background-size: 32px 32px; + mask-image: linear-gradient(180deg, transparent, black 18%, black 82%, transparent); + -webkit-mask-image: linear-gradient(180deg, transparent, black 18%, black 82%, transparent); + } + + .b-cmp-head { + max-width: 760px; + margin-bottom: 56px; + position: relative; + z-index: 2; + + .b-eyebrow { + margin-bottom: 22px; + color: rgba(15, 26, 20, 0.62); + } + + .b-eyebrow-line { background: var(--bn-green-deep); } + } + } + + .b-cmp-title { + font-family: var(--bn-mono); + font-weight: 700; + text-transform: uppercase; + font-size: clamp(36px, 4.2vw, 56px); + line-height: 0.95; + letter-spacing: -0.035em; + word-spacing: -0.18em; + color: var(--bn-ink); + margin: 0 0 22px; + } + + .b-cmp-sub { + font-size: 15px; + line-height: 1.6; + word-spacing: -0.12em; + color: rgba(15, 26, 20, 0.70); + max-width: 620px; + margin: 0; + } + + + .b-tabs { + display: flex; + gap: 0; + border-bottom: 1px solid rgba(15, 26, 20, 0.14); + margin-bottom: 36px; + flex-wrap: wrap; + position: relative; + z-index: 2; + } + + .b-tab { + font-family: var(--bn-mono); + font-size: 12.5px; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgba(15, 26, 20, 0.55); + background: none; + border: 0; + padding: 18px 26px; + cursor: pointer; + position: relative; + white-space: nowrap; + transition: color 0.18s ease; + + &:hover { color: var(--bn-ink); } + + &:hover .b-tab-tip, + &:focus-visible .b-tab-tip { + opacity: 1; + transform: translateX(-50%) translateY(0); + } + + &.is-active { + color: var(--bn-ink); + + &::after { + content: ''; + position: absolute; + left: 0; + right: 0; + bottom: -1px; + height: 2px; + background: var(--bn-green-deep); + } + + .b-tab-count { color: var(--bn-green-deep); } + } + } + + .b-tab-tip { + position: absolute; + bottom: calc(100% + 10px); + left: 50%; + transform: translateX(-50%) translateY(4px); + width: 280px; + padding: 12px 14px; + background: var(--bn-ink); + color: rgba(245, 239, 228, 0.92); + font-family: var(--bn-sans); + font-size: 12.5px; + font-weight: 400; + letter-spacing: 0; + text-transform: none; + line-height: 1.5; + text-align: left; + border-radius: 6px; + opacity: 0; + pointer-events: none; + transition: opacity 0.18s ease, transform 0.18s ease; + z-index: 10; + box-shadow: 0 14px 36px -18px rgba(15, 26, 20, 0.55); + white-space: normal; + + &::after { + content: ''; + position: absolute; + top: 100%; + left: 50%; + transform: translateX(-50%); + border: 6px solid transparent; + border-top-color: var(--bn-ink); + } + } + + .b-sum-row { + display: grid; + gap: 20px; + position: relative; + z-index: 2; + + &.is-cols-3 { grid-template-columns: repeat(3, 1fr); } + &.is-cols-2 { grid-template-columns: repeat(2, 1fr); } + } + + .b-card { + background: var(--bn-paper); + border: 1px solid rgba(15, 26, 20, 0.10); + border-radius: 12px; + padding: 30px 28px 26px; + display: flex; + flex-direction: column; + cursor: pointer; + text-align: left; + color: inherit; + font: inherit; + position: relative; + transition: + background 0.25s ease, + border-color 0.25s ease, + box-shadow 0.25s ease, + transform 0.25s ease; + + &:hover { + background: var(--bn-paper); + border-color: rgba(15, 26, 20, 0.22); + box-shadow: 0 12px 32px -16px rgba(15, 26, 20, 0.20); + transform: translateY(-2px); + } + + &.is-active { + background: var(--bn-paper); + border-color: var(--bn-green-deep); + box-shadow: + 0 0 0 1px var(--bn-green-deep) inset, + 0 14px 36px -20px rgba(11, 122, 88, 0.45); + + &::after { + content: ''; + position: absolute; + left: 50%; + bottom: -10px; + width: 18px; + height: 18px; + background: var(--bn-paper); + border-right: 1px solid var(--bn-green-deep); + border-bottom: 1px solid var(--bn-green-deep); + transform: translateX(-50%) rotate(45deg); + z-index: 3; + } + + .b-card-tip { color: var(--bn-green-deep); } + } + } + + .b-card-head { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 6px; + } + + .b-card-title { + font-family: var(--bn-mono); + font-weight: 700; + text-transform: uppercase; + font-size: 22px; + line-height: 1.12; + letter-spacing: -0.005em; + color: var(--bn-ink); + margin: 0; + } + + .b-card-tag { + font-family: var(--bn-mono); + font-size: 10.5px; + letter-spacing: 0.16em; + text-transform: uppercase; + color: rgba(15, 26, 20, 0.50); + padding-top: 6px; + } + + .b-card-metric { + font-family: var(--bn-mono); + font-size: 11px; + letter-spacing: 0.18em; + text-transform: uppercase; + color: rgba(15, 26, 20, 0.50); + margin: 0 0 16px; + } + + .b-bars { + display: grid; + gap: 11px; + margin: 6px 0 18px; + } + + .b-bar { + display: grid; + grid-template-columns: 120px 1fr 88px; + gap: 14px; + align-items: center; + font-family: var(--bn-mono); + font-size: 12.5px; + + &.is-doris { + .b-bar-label { + color: var(--bn-green-deep); + font-weight: 700; + } + .b-bar-fill { background: var(--bn-green-deep); } + .b-bar-value { + color: var(--bn-green-deep); + font-weight: 700; + } + } + } + + .b-bar-label { + color: rgba(15, 26, 20, 0.78); + letter-spacing: 0.02em; + display: flex; + align-items: center; + gap: 0; + min-width: 0; + + span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + + .b-bar-partial { + display: inline-block; + font-family: var(--bn-mono); + font-size: 10.5px; + font-weight: 700; + letter-spacing: 0.02em; + vertical-align: 1px; + } + + .b-bar-track { + height: 10px; + background: rgba(15, 26, 20, 0.08); + position: relative; + border-radius: 1px; + overflow: hidden; + } + + .b-bar-fill { + position: absolute; + inset: 0 auto 0 0; + background: rgba(15, 26, 20, 0.28); + border-radius: 1px; + width: 0; + transition: width 0.8s cubic-bezier(.2, .8, .2, 1); + } + + .b-bar-value { + text-align: right; + color: var(--bn-ink); + font-variant-numeric: tabular-nums; + display: flex; + align-items: center; + justify-content: flex-end; + gap: 6px; + } + + .b-card-desc { + margin-top: auto; + padding: 14px 0 0; + border-top: 1px dashed rgba(15, 26, 20, 0.20); + font-family: var(--bn-sans); + font-size: 13.5px; + line-height: 1.55; + color: rgba(15, 26, 20, 0.72); + } + + .b-card-note { + margin-top: auto; + margin-bottom: 12px; + font-family: var(--bn-sans); + font-size: 12px; + line-height: 1.5; + font-style: italic; + color: rgba(15, 26, 20, 0.55); + } + + .b-card-note + .b-card-desc { margin-top: 0; } + + .b-card-tip { + margin-top: 16px; + font-family: var(--bn-mono); + font-size: 12px; + font-weight: 700; + letter-spacing: 0.14em; + text-transform: uppercase; + color: var(--bn-green-deep); + display: flex; + align-items: center; + gap: 6px; + transform-origin: left center; + animation: b-card-tip-breath 1.8s ease-in-out infinite; + } + + @keyframes b-card-tip-breath { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); } + } + + .b-card:hover .b-card-tip, + .b-card.is-active .b-card-tip { + animation: none; + transform: scale(1); + } + + @media (prefers-reduced-motion: reduce) { + .b-card-tip { animation: none; } + } + + // ── Detail strip + .b-detail { + margin-top: 30px; + border: 1px solid var(--bn-green-deep); + border-radius: 12px; + background: var(--bn-paper); + padding: 32px 32px 28px; + position: relative; + z-index: 2; + overflow: hidden; + box-shadow: 0 18px 44px -24px rgba(11, 122, 88, 0.35); + animation: b-detail-enter 0.5s cubic-bezier(.2, .8, .2, 1); + } + + @keyframes b-detail-enter { + from { opacity: 0; transform: translateY(-12px); } + to { opacity: 1; transform: none; } + } + + .b-detail-head { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 24px; + flex-wrap: wrap; + margin-bottom: 24px; + } + + .b-detail-title { + font-family: var(--bn-mono); + font-weight: 700; + text-transform: uppercase; + font-size: 22px; + line-height: 1.12; + letter-spacing: -0.005em; + color: var(--bn-ink); + margin: 0; + display: flex; + align-items: baseline; + gap: 14px; + flex-wrap: wrap; + + .b-detail-title-sub { + font-family: var(--bn-mono); + font-size: 11px; + letter-spacing: 0.18em; + text-transform: uppercase; + color: rgba(15, 26, 20, 0.52); + font-weight: 500; + } + } + + .b-detail-legend { + display: flex; + gap: 18px; + font-family: var(--bn-mono); + font-size: 11px; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgba(15, 26, 20, 0.68); + flex-wrap: wrap; + } + + .b-detail-legend-item { + display: inline-flex; + align-items: center; + gap: 8px; + } + + .b-detail-legend-swatch { + width: 11px; + height: 11px; + border-radius: 1px; + display: inline-block; + } + + .b-detail-scroll { + overflow-x: auto; + overflow-y: hidden; + border: 1px solid rgba(15, 26, 20, 0.10); + border-radius: 8px; + background: var(--bn-cream-light); + + &::-webkit-scrollbar { height: 10px; } + &::-webkit-scrollbar-track { background: rgba(15, 26, 20, 0.06); } + &::-webkit-scrollbar-thumb { + background: rgba(15, 26, 20, 0.22); + border-radius: 5px; + } + } + + .b-chart { + position: relative; + padding: 24px 24px 18px; + } + + .b-chart-grid { + position: absolute; + left: 60px; + right: 24px; + top: 24px; + bottom: 40px; + border-bottom: 1px solid rgba(15, 26, 20, 0.22); + background-image: linear-gradient(rgba(15, 26, 20, 0.08) 1px, transparent 1px); + background-size: 100% 25%; + background-position: 0 0; + } + + .b-chart-yaxis { + position: absolute; + left: 0; + top: 24px; + bottom: 40px; + width: 54px; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: flex-end; + font-family: var(--bn-mono); + font-size: 10px; + color: rgba(15, 26, 20, 0.55); + letter-spacing: 0.06em; + padding-right: 6px; + + span { transform: translateY(50%); } + span:first-child { transform: translateY(-2px); } + span:last-child { transform: translateY(2px); } + } + + .b-chart-body { + position: relative; + margin-left: 60px; + display: flex; + align-items: flex-end; + gap: 6px; + height: 252px; + } + + .b-cluster { + display: flex; + flex-direction: column; + align-items: center; + flex: 0 0 auto; + } + + .b-cluster-bars { + display: flex; + align-items: flex-end; + gap: 2px; + height: 230px; + } + + .b-cluster-bar { + width: 8px; + background: rgba(15, 26, 20, 0.35); + border-radius: 1px 1px 0 0; + height: 0; + transition: height 0.7s cubic-bezier(.2, .8, .2, 1); + position: relative; + cursor: default; + + &.is-doris { background: var(--bn-green-deep); } + + &.is-failed { + background: transparent; + border: 1px dashed rgba(255, 92, 57, 0.65); + background-image: repeating-linear-gradient( + 45deg, + transparent 0 3px, + rgba(255, 92, 57, 0.40) 3px 6px + ); + min-height: 0; + + .b-cluster-bar-tip { color: var(--bn-coral); } + } + + &:hover { + filter: brightness(1.06); + z-index: 20; + + .b-cluster-bar-tip { + opacity: 1; + transform: translate(-50%, -110%); + } + } + } + + .b-cluster-bar-tip { + position: absolute; + left: 50%; + top: 0; + transform: translate(-50%, -100%); + background: var(--bn-ink); + color: var(--bn-cream-light); + font-family: var(--bn-mono); + font-size: 11px; + padding: 5px 9px; + border-radius: 4px; + white-space: nowrap; + pointer-events: none; + opacity: 0; + transition: opacity 0.15s, transform 0.15s; + border: 1px solid rgba(15, 26, 20, 0.40); + z-index: 10; + } + + .b-cluster-label { + margin-top: 6px; + font-family: var(--bn-mono); + font-size: 10px; + letter-spacing: 0.02em; + color: rgba(15, 26, 20, 0.58); + height: 16px; + line-height: 1; + text-align: center; + white-space: nowrap; + display: flex; + align-items: center; + justify-content: center; + } + + .b-detail-env { + margin-top: 18px; + font-family: var(--bn-mono); + font-size: 12px; + letter-spacing: 0.02em; + line-height: 1.6; + color: rgba(15, 26, 20, 0.70); + padding: 14px 18px; + background: var(--bn-cream-light); + border-radius: 6px; + border-left: 2px solid var(--bn-green-deep); + } + + .b-detail-env-list { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 4px; + } + + .b-detail-env-prod { + display: block; + + &.is-doris .b-detail-env-prod-name { + color: var(--bn-green-deep); + font-weight: 700; + } + } + + .b-detail-env-prod-name { color: var(--bn-ink); } + .b-detail-env-partial { color: var(--bn-coral); } + + .b-detail-foot { + margin-top: 14px; + font-family: var(--bn-mono); + font-size: 11.5px; + color: rgba(15, 26, 20, 0.58); + } + + // ───────────────────────────────────────────────────────────────────────── + // Reproduce + // ───────────────────────────────────────────────────────────────────────── + .b-repro { + background: var(--bn-green-dark); + border-top: 1px solid rgba(245, 239, 228, 0.06); + padding: 72px 0; + position: relative; + overflow: hidden; + } + + .b-repro-head { + max-width: 760px; + margin-bottom: 40px; + position: relative; + z-index: 2; + + .b-eyebrow { margin-bottom: 22px; } + } + + .b-method { + position: relative; + z-index: 2; + margin-bottom: 48px; + padding: 26px 28px 22px; + border: 1px solid rgba(245, 239, 228, 0.10); + border-radius: 10px; + background: rgba(0, 0, 0, 0.18); + } + + .b-method-head { + display: flex; + justify-content: space-between; + align-items: center; + gap: 16px; + flex-wrap: wrap; + margin-bottom: 22px; + padding-bottom: 16px; + border-bottom: 1px solid rgba(245, 239, 228, 0.10); + } + + .b-method-link { + font-family: var(--bn-mono); + font-size: 12px; + font-weight: 600; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--bn-yellow); + text-decoration: none; + border-bottom: 1px solid rgba(255, 210, 63, 0.35); + padding-bottom: 2px; + transition: color 0.15s ease, border-color 0.15s ease; + + &:hover { + color: var(--bn-yellow-bright); + border-color: var(--bn-yellow); + text-decoration: none; + } + } + + .b-method-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 22px 32px; + } + + .b-method-item { + display: flex; + flex-direction: column; + gap: 8px; + } + + .b-method-label { + font-family: var(--bn-mono); + font-size: 11px; + font-weight: 700; + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--bn-yellow); + } + + .b-method-body { + font-family: var(--bn-sans); + font-size: 13.5px; + line-height: 1.55; + color: rgba(245, 239, 228, 0.82); + } + + .b-repro-title { + font-family: var(--bn-mono); + font-weight: 700; + text-transform: uppercase; + font-size: clamp(36px, 4.2vw, 56px); + line-height: 0.95; + letter-spacing: -0.035em; + word-spacing: -0.18em; + color: var(--bn-cream-light); + margin: 0 0 22px; + } + + .b-repro-sub { + font-size: 15px; + line-height: 1.6; + word-spacing: -0.12em; + color: rgba(245, 239, 228, 0.85); + max-width: 620px; + margin: 0; + } + + .b-repro-grid { + display: grid; + grid-template-columns: 2fr 3fr; + gap: 24px; + align-items: stretch; + position: relative; + z-index: 2; + } + + .b-steps { + display: flex; + flex-direction: column; + gap: 14px; + } + + .b-step { + display: grid; + grid-template-columns: 48px 1fr; + gap: 18px; + padding: 22px 24px; + border: 1px solid rgba(245, 239, 228, 0.10); + border-radius: 10px; + background: rgba(0, 0, 0, 0.16); + cursor: pointer; + text-align: left; + color: inherit; + font: inherit; + transition: background 0.2s, border-color 0.2s; + flex: 1; + + &:hover { + background: rgba(0, 0, 0, 0.24); + border-color: rgba(245, 239, 228, 0.18); + } + + &.is-active { + background: rgba(255, 210, 63, 0.06); + border-color: rgba(255, 210, 63, 0.45); + box-shadow: 0 0 0 1px rgba(255, 210, 63, 0.25) inset; + + .b-step-num { color: var(--bn-yellow); } + } + } + + .b-step-num { + font-family: var(--bn-mono); + font-weight: 700; + font-size: 24px; + color: rgba(245, 239, 228, 0.55); + line-height: 1; + font-variant-numeric: tabular-nums; + } + + .b-step-title { + font-family: var(--bn-mono); + font-weight: 700; + text-transform: uppercase; + font-size: 14px; + letter-spacing: 0.02em; + color: var(--bn-cream-light); + margin: 0 0 6px; + } + + .b-step-body { + font-family: var(--bn-sans); + font-size: 14px; + line-height: 1.55; + color: rgba(245, 239, 228, 0.72); + margin: 0; + } + + .b-term { + position: relative; + border: 1px solid rgba(245, 239, 228, 0.10); + border-radius: 10px; + background: #0A0E0C; + display: flex; + flex-direction: column; + overflow: hidden; + box-shadow: + 0 24px 60px -28px rgba(0, 0, 0, 0.55), + 0 0 0 1px rgba(0, 0, 0, 0.35); + + pre, + pre[class*='language-'] { + margin: 0; + padding: 28px 28px; + font-family: var(--bn-mono); + font-size: 13.5px; + line-height: 1.75; + color: var(--bn-cream-light); + background: transparent; + white-space: pre; + overflow: auto; + flex: 1; + border: 0; + box-shadow: none; + border-radius: 0; + + .c-prompt { color: var(--bn-green-glow); user-select: none; } + .c-comment { color: rgba(245, 239, 228, 0.55); } + .c-cmd { color: var(--bn-yellow); } + .c-str { color: #9FDCC7; } + .c-arg { color: #FFCB69; } + } + } + + .b-term-bar { + display: flex; + justify-content: space-between; + align-items: center; + padding: 14px 18px; + background: #050706; + border-bottom: 1px solid rgba(245, 239, 228, 0.08); + font-family: var(--bn-mono); + font-size: 11px; + letter-spacing: 0.14em; + text-transform: uppercase; + color: rgba(245, 239, 228, 0.55); + } + + .b-term-dots { + display: inline-flex; + gap: 7px; + + span { + width: 11px; + height: 11px; + border-radius: 50%; + background: rgba(245, 239, 228, 0.18); + } + + span:nth-child(1) { background: rgba(255, 92, 57, 0.65); } + span:nth-child(2) { background: rgba(255, 210, 63, 0.65); } + span:nth-child(3) { background: rgba(45, 223, 168, 0.65); } + } + + .b-term-title { + display: inline-flex; + align-items: center; + gap: 10px; + } + + .b-term-step { color: var(--bn-yellow); } + + .b-term-cursor { + display: inline-block; + width: 8px; + height: 14px; + background: var(--bn-cream-light); + vertical-align: -2px; + animation: b-blink 1.1s steps(2, end) infinite; + } + + @keyframes b-blink { 50% { opacity: 0; } } + + // ───────────────────────────────────────────────────────────────────────── + // CTA + // ───────────────────────────────────────────────────────────────────────── + .b-cta { + background: var(--bn-green-darkest); + border-top: 1px solid rgba(245, 239, 228, 0.06); + padding: 72px 0; + text-align: center; + position: relative; + overflow: hidden; + } + + .b-cta-grid { + position: absolute; + inset: 0; + background-image: radial-gradient(rgba(245, 239, 228, 0.06) 1.2px, transparent 1.2px); + background-size: 28px 28px; + mask-image: radial-gradient(ellipse at center, black 20%, transparent 70%); + -webkit-mask-image: radial-gradient(ellipse at center, black 20%, transparent 70%); + } + + .b-cta-inner { position: relative; z-index: 5; } + + .b-cta-eyebrow { + margin-bottom: 30px; + justify-content: center; + } + + .b-cta-title { + font-family: var(--bn-mono); + font-weight: 700; + text-transform: uppercase; + font-size: clamp(36px, 4.2vw, 56px); + line-height: 0.95; + letter-spacing: -0.035em; + word-spacing: -0.18em; + color: var(--bn-cream-light); + margin: 0 auto 44px; + max-width: 18ch; + + .b-accent { color: var(--bn-yellow); } + } + + .b-cta-actions { + display: inline-flex; + gap: 14px; + flex-wrap: wrap; + justify-content: center; + } + + // ───────────────────────────────────────────────────────────────────────── + // Responsive + // ───────────────────────────────────────────────────────────────────────── + @media (max-width: 1100px) { + .b-sum-row.is-cols-3 { grid-template-columns: 1fr; } + .b-sum-row.is-cols-2 { grid-template-columns: 1fr; } + .b-card.is-active::after { display: none; } + .b-repro-grid { grid-template-columns: 1fr; } + .b-term pre { min-height: 240px; } + .b-bar { grid-template-columns: 104px 1fr 76px; } + .b-method-grid { grid-template-columns: repeat(2, 1fr); } + } + + @media (max-width: 720px) { + --bn-gutter: 24px; + + .b-hero, + .b-cmp, + .b-repro, + .b-cta { padding: 56px 0; } + + .b-hero-title { font-size: clamp(32px, 8.6vw, 44px); } + .b-hero-sub { font-size: 14px; margin-top: 16px; } + + .b-cmp-head { margin-bottom: 32px; } + .b-cmp-title { font-size: clamp(28px, 7.4vw, 40px); margin-bottom: 16px; } + .b-cmp-sub { font-size: 14px; } + + .b-tabs { + overflow-x: auto; + flex-wrap: nowrap; + margin-bottom: 24px; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + + &::-webkit-scrollbar { display: none; } + } + .b-tab { + padding: 14px 16px; + font-size: 11.5px; + flex: 0 0 auto; + + .b-tab-tip { display: none; } + } + + // Section 2 (Comparison): on small screens, cards are informational only — + // the per-query breakdown is hidden to keep the page readable. + .b-card { + cursor: default; + padding: 24px 20px 22px; + + &:hover { + transform: none; + border-color: rgba(15, 26, 20, 0.12); + box-shadow: 0 8px 22px -16px rgba(15, 26, 20, 0.18); + } + + &.is-active { + background: var(--bn-paper); + border-color: rgba(15, 26, 20, 0.12); + box-shadow: none; + + &::after { display: none; } + } + } + .b-card-head { gap: 10px; } + .b-card-title { font-size: 19px; } + .b-card-tip { display: none; } + .b-detail { display: none; } + + .b-bar { grid-template-columns: 80px 1fr 56px; gap: 10px; font-size: 11.5px; } + + .b-method { padding: 22px 18px 18px; } + .b-method-grid { grid-template-columns: 1fr; gap: 18px; } + + .b-repro-title { font-size: clamp(28px, 7.4vw, 40px); } + .b-cta-title { font-size: clamp(28px, 7.4vw, 40px); margin-bottom: 32px; } + } + + @media (max-width: 480px) { + .b-card { padding: 22px 16px 18px; } + .b-card-head { + flex-direction: column; + align-items: flex-start; + gap: 4px; + } + .b-card-title { font-size: 17px; } + .b-card-tag { padding-top: 0; } + .b-bars { gap: 9px; } + .b-bar { + grid-template-columns: 68px 1fr 48px; + gap: 8px; + font-size: 11px; + } + .b-bar-label { letter-spacing: 0; } + .b-card-desc { font-size: 12.5px; padding-top: 12px; } + .b-card-note { font-size: 11.5px; } + } +} diff --git a/src/components/why-doris-next/BenchmarkNext.tsx b/src/components/why-doris-next/BenchmarkNext.tsx new file mode 100644 index 0000000000000..c42a842e1cde9 --- /dev/null +++ b/src/components/why-doris-next/BenchmarkNext.tsx @@ -0,0 +1,815 @@ +import React, { + CSSProperties, + Fragment, + JSX, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; +import Link from '@docusaurus/Link'; +import { LayoutNext } from '../home-next/LayoutNext'; +import benchmarkData from '@site/src/constant/benchmark.data.json'; +import './BenchmarkNext.scss'; + +/* ────────────────────────────────────────────────────────────────────────── + * Types + * ────────────────────────────────────────────────────────────────────────── */ + +type ProductId = 'doris' | 'clickhouse' | 'redshift' | 'snowflake' | 'trino'; + +interface Product { + id: ProductId; + name: string; + version: string; + machine: string; + clusterSize: number; + totalRuntime: number; + queriesCompleted: number; + queriesTotal: number; + perQuery: Record; +} + +interface Benchmark { + id: string; + name: string; + scale: string; + queries: string[]; + products: Product[]; +} + +interface Tab { + id: string; + label: string; + benchmarks: Benchmark[]; +} + +interface BenchmarkDataset { + syncedAt: string; + tabs: Tab[]; +} + +/* ────────────────────────────────────────────────────────────────────────── + * Data — loaded from src/constant/benchmark.data.json + * ────────────────────────────────────────────────────────────────────────── */ + +const DATA = benchmarkData as unknown as BenchmarkDataset; + +const TAB_DESCRIPTIONS: Record = { + internal: + 'Each engine reads and writes data in its own native format, so Doris and its peers run on their own storage layers.', + iceberg: + 'Every engine queries the same Apache Iceberg dataset, so storage is held constant and only the engine changes.', +}; + +const BENCH_DESC: Record = { + ssb: 'A star-schema benchmark with 13 queries, heavy on wide joins and aggregations.', + tpch: 'The classic decision-support benchmark: 22 ad-hoc queries against a normalized schema.', + tpcds: 'The most demanding decision-support benchmark: 99 queries that exercise the full surface of an analytical engine.', +}; + +const PRODUCT_COLORS: Record = { + doris: 'var(--bn-green-deep)', + clickhouse: '#3D4A55', + redshift: '#A4633A', + snowflake: '#3C6CAA', + trino: 'var(--bn-coral)', +}; + +/* ────────────────────────────────────────────────────────────────────────── + * Reveal-on-scroll + * ────────────────────────────────────────────────────────────────────────── */ + +function useRevealObserver(): void { + useEffect(() => { + const items = document.querySelectorAll('.bench-next [data-reveal]'); + if (!('IntersectionObserver' in window)) { + items.forEach(i => i.classList.add('is-visible')); + return undefined; + } + const io = new IntersectionObserver( + entries => { + entries.forEach(e => { + if (e.isIntersecting) { + e.target.classList.add('is-visible'); + io.unobserve(e.target); + } + }); + }, + { threshold: 0.12, rootMargin: '0px 0px -8% 0px' } + ); + items.forEach(i => io.observe(i)); + return () => io.disconnect(); + }, []); +} + +/* ────────────────────────────────────────────────────────────────────────── + * Hero + * ────────────────────────────────────────────────────────────────────────── */ + +function Hero(): JSX.Element { + return ( +
+
+

+ See how fast
+ Apache Doris really is. +

+

+ Side-by-side query results: Doris versus ClickHouse, Redshift, Snowflake, and + Trino on{' '} + + Star Schema Benchmark + + ,{' '} + + TPC-H + + , and{' '} + + TPC-DS + + . +

+
+
+ ); +} + +/* ────────────────────────────────────────────────────────────────────────── + * Summary card row — total-runtime bars per benchmark + * ────────────────────────────────────────────────────────────────────────── */ + +function SummaryBar({ product, max }: { product: Product; max: number }): JSX.Element { + const [w, setW] = useState(0); + const ref = useRef(null); + const partial = product.queriesCompleted < product.queriesTotal; + const targetW = max > 0 ? (product.totalRuntime / max) * 100 : 0; + + useEffect(() => { + if (!ref.current) return undefined; + const el = ref.current; + if (!('IntersectionObserver' in window)) { + setW(targetW); + return undefined; + } + const io = new IntersectionObserver( + entries => { + entries.forEach(e => { + if (e.isIntersecting) { + requestAnimationFrame(() => setW(targetW)); + io.disconnect(); + } + }); + }, + { threshold: 0.25 } + ); + io.observe(el); + return () => io.disconnect(); + }, [targetW]); + + return ( +
+
+ {product.name} + {partial ? ( + + [1] + + ) : null} +
+
+
+
+
+ {product.totalRuntime != null ? `${product.totalRuntime.toFixed(1)}s` : '—'} +
+
+ ); +} + +function SummaryCard({ + bench, + active, + onToggle, +}: { + bench: Benchmark; + active: boolean; + onToggle: () => void; +}): JSX.Element { + const cardRef = useRef(null); + const [revealed, setRevealed] = useState(false); + const sortedProducts = useMemo( + () => + [...bench.products].sort((a, b) => { + const ar = a.totalRuntime ?? Infinity; + const br = b.totalRuntime ?? Infinity; + return ar - br; + }), + [bench] + ); + const max = useMemo( + () => Math.max(...sortedProducts.map(p => p.totalRuntime || 0)), + [sortedProducts] + ); + const hasPartial = sortedProducts.some( + p => p.queriesCompleted < p.queriesTotal + ); + + useEffect(() => { + if (!cardRef.current) return undefined; + if (!('IntersectionObserver' in window)) { + setRevealed(true); + return undefined; + } + const node = cardRef.current; + const io = new IntersectionObserver( + entries => { + entries.forEach(e => { + if (e.isIntersecting) { + setRevealed(true); + io.unobserve(node); + } + }); + }, + { threshold: 0.12, rootMargin: '0px 0px -8% 0px' } + ); + io.observe(node); + return () => io.disconnect(); + }, []); + + const handleEnter = () => { + const card = cardRef.current; + if (!card) return; + const fills = card.querySelectorAll('.b-bar-fill'); + const widths = Array.from(fills).map(f => f.style.width); + fills.forEach(f => { + f.style.transition = 'none'; + f.style.width = '0%'; + }); + void card.offsetWidth; + fills.forEach((f, i) => { + f.style.transition = ''; + requestAnimationFrame(() => { + f.style.width = widths[i]; + }); + }); + }; + + return ( + + ); +} + +/* ────────────────────────────────────────────────────────────────────────── + * Detail strip — per-query grouped bars + * ────────────────────────────────────────────────────────────────────────── */ + +function niceAxis(maxValue: number): { niceMax: number; ticks: number[] } { + if (maxValue <= 0) return { niceMax: 1, ticks: [1, 0] }; + const roughStep = maxValue / 4; + const magnitude = Math.pow(10, Math.floor(Math.log10(roughStep))); + const normalized = roughStep / magnitude; + let nice: number; + if (normalized <= 1) nice = 1; + else if (normalized <= 2) nice = 2; + else if (normalized <= 5) nice = 5; + else nice = 10; + const step = nice * magnitude; + const niceMax = Math.ceil(maxValue / step) * step; + const ticks: number[] = []; + for (let v = niceMax; v >= -1e-9; v -= step) ticks.push(Math.round(v * 1000) / 1000); + return { niceMax, ticks }; +} + +function DetailStrip({ bench }: { bench: Benchmark }): JSX.Element { + const sortedProducts = useMemo( + () => + [...bench.products].sort((a, b) => { + const ar = a.totalRuntime ?? Infinity; + const br = b.totalRuntime ?? Infinity; + return ar - br; + }), + [bench] + ); + + const dataMax = useMemo(() => { + let m = 0; + sortedProducts.forEach(p => { + bench.queries.forEach(q => { + const v = p.perQuery[q]; + if (v != null && v > m) m = v; + }); + }); + return m; + }, [sortedProducts, bench.queries]); + + const { niceMax, ticks: yticks } = useMemo(() => niceAxis(dataMax), [dataMax]); + + const [animated, setAnimated] = useState(false); + useEffect(() => { + setAnimated(false); + const t = setTimeout(() => setAnimated(true), 30); + return () => clearTimeout(t); + }, [bench.id]); + + const barW = 10; + const barGap = 2; + const clusterPad = 8; + const clusterW = + sortedProducts.length * barW + (sortedProducts.length - 1) * barGap + clusterPad * 2; + + return ( +
+
+

+ {bench.name} per-query runtime + + scale {bench.scale} · {bench.queries.length} queries + +

+
+ {sortedProducts.map(p => ( + + + {p.name} + + ))} + + + Failed + +
+
+
+
+ + +
+
+
    + {sortedProducts.map(p => { + const partial = p.queriesCompleted < p.queriesTotal; + return ( +
  • + + {p.name} {p.version} + + + {' · '} + {p.clusterSize} × {p.machine} + + {partial ? ( + + {' · '}completed {p.queriesCompleted} / {p.queriesTotal} + + ) : null} +
  • + ); + })} +
+
+
+ Hover any bar for its exact runtime. Hatched bars are queries that didn’t + finish within the time limit. +
+
+ ); +} + +/* ────────────────────────────────────────────────────────────────────────── + * Comparison section + * ────────────────────────────────────────────────────────────────────────── */ + +function Comparison(): JSX.Element { + const [activeTab, setActiveTab] = useState(DATA.tabs[0].id); + const [expanded, setExpanded] = useState(null); + + const tab = DATA.tabs.find(t => t.id === activeTab) ?? DATA.tabs[0]; + const expandedBench = tab.benchmarks.find(b => b.id === expanded); + const colsClass = `is-cols-${tab.benchmarks.length}`; + + const switchTab = (id: string) => { + setActiveTab(id); + setExpanded(null); + }; + + return ( +
+
+ ); +} + +/* ────────────────────────────────────────────────────────────────────────── + * Reproduce section + * ────────────────────────────────────────────────────────────────────────── */ + +interface StepLine { + p?: string; + cmd?: string; + arg?: string; + c?: string; +} + +interface ReproStep { + id: number; + title: string; + body: string; + promptLine: string; + file: string; + lines: StepLine[]; +} + +const METHODOLOGY: { label: string; body: string }[] = [ + { + label: 'What we measure', + body: 'Per-query runtime, summed across the selected queries for each benchmark.', + }, + { + label: 'Runs per query', + body: 'Each query runs at least 3×. Cold = first run; hot = faster of runs 2 and 3.', + }, + { + label: 'Cache control', + body: 'Result caches disabled on every engine. Doris BE caches cleared before cold runs.', + }, + { + label: 'Hardware parity', + body: 'Same region and VPC across engines, with identical machine class for each cluster.', + }, + { + label: 'Data parity', + body: 'Same source data loaded into each engine before the run, in its native format.', + }, + { + label: 'Transparency', + body: 'All scripts, queries, configs, and per-run metadata are published in the repo.', + }, +]; + +const REPRO_STEPS: ReproStep[] = [ + { + id: 1, + title: 'Clone the benchmark scripts', + body: 'Pull the benchmark repository onto the machine that will drive the run.', + promptLine: 'user@bench ~ %', + file: 'shell', + lines: [ + { p: '$ ', cmd: 'git clone', arg: 'https://github.com/velodb/benchmarks' }, + { c: "Cloning into 'benchmarks'…" }, + { c: 'remote: Enumerating objects: 1,842, done.' }, + { c: 'Receiving objects: 100% (1,842/1,842), 4.21 MiB | 8.32 MiB/s, done.' }, + { p: '$ ', cmd: 'cd', arg: 'benchmarks' }, + ], + }, + { + id: 2, + title: 'Configure your Doris cluster endpoint', + body: + 'Open the config file and fill in the host, port, user, password, and database for your Doris cluster.', + promptLine: 'user@bench ~/benchmarks %', + file: 'benchmark.yaml', + lines: [ + { p: '$ ', cmd: 'vim', arg: 'benchmarks/clickbench/doris/benchmark.yaml' }, + { c: '# fill in:' }, + { c: '# host: ' }, + { c: '# port: 9030' }, + { c: '# user: root' }, + { c: '# password: ' }, + { c: '# database: benchmark' }, + ], + }, + { + id: 3, + title: 'Install third-party tooling', + body: + 'The runner relies on a few CLI clients (mysql, jq, hyperfine). One make target installs them all.', + promptLine: 'user@bench ~/benchmarks %', + file: 'shell', + lines: [ + { p: '$ ', cmd: 'make', arg: 'thirdparty' }, + { c: '→ Installing mysql-client … ok' }, + { c: '→ Installing jq … ok' }, + { c: '→ Installing hyperfine … ok' }, + { c: 'Third-party tooling ready.' }, + ], + }, + { + id: 4, + title: 'Run the benchmark and generate the report', + body: + 'Kick off the run, then collect the report. The runner prints a per-query summary as it goes.', + promptLine: 'user@bench ~/benchmarks %', + file: 'shell', + lines: [ + { p: '$ ', cmd: 'bash', arg: 'benchmark.sh --config benchmarks/clickbench/doris/benchmark.yaml' }, + { c: '[ssb] q1.1 … 0.149s q1.2 … 0.106s q1.3 … 0.099s' }, + { c: '[ssb] q2.1 … 1.162s q2.2 … 1.237s q2.3 … 1.107s' }, + { c: '[ssb] q3.1 … 2.223s …' }, + { c: 'Benchmark complete · 13/13 queries · 11.559 s total' }, + { p: '$ ', cmd: 'make', arg: 'result' }, + { c: '→ Wrote results to results/aws.32C.json' }, + ], + }, +]; + +function ReproSection(): JSX.Element { + const [active, setActive] = useState(1); + const step = REPRO_STEPS.find(s => s.id === active) ?? REPRO_STEPS[0]; + + return ( +
+
+
+

+ Run it yourself
in five minutes. +

+

+ Every number above is reproducible from open scripts. Four steps, four + shell commands. Click a step to see what runs. +

+
+
+
+ + + How we measure + + + Read the full methodology ↗ + +
+
+ {METHODOLOGY.map(m => ( +
+
{m.label}
+
{m.body}
+
+ ))} +
+
+
+
+ {REPRO_STEPS.map(s => ( + + ))} +
+ +
+
+ + + + + {step.promptLine} + — step 0{step.id} + + {step.file} +
+
+                            {step.lines.map((ln, i) => (
+                                
+                                    {ln.p ? {ln.p} : null}
+                                    {ln.cmd ? {ln.cmd} : null}
+                                    {ln.arg ? (
+                                        <>
+                                            {' '}
+                                            {ln.arg}
+                                        
+                                    ) : null}
+                                    {ln.c ? {ln.c} : null}
+                                    {'\n'}
+                                
+                            ))}
+                            $ 
+                            
+                        
+
+
+
+
+ ); +} + +/* ────────────────────────────────────────────────────────────────────────── + * CTA + * ────────────────────────────────────────────────────────────────────────── */ + +function CTA(): JSX.Element { + return ( +
+
+

+ Try Apache Doris on
your own data. +

+
+ + + Get Started + + +
+
+
+ ); +} + +/* ────────────────────────────────────────────────────────────────────────── + * Top-level + * ────────────────────────────────────────────────────────────────────────── */ + +export default function BenchmarkNext(): JSX.Element { + useRevealObserver(); + return ( + +
+ + + {/* hidden for now; revisit later */} + +
+
+ ); +} diff --git a/src/constant/benchmark.data.json b/src/constant/benchmark.data.json new file mode 100644 index 0000000000000..009529365daf0 --- /dev/null +++ b/src/constant/benchmark.data.json @@ -0,0 +1,1308 @@ +{ + "syncedAt": "2026-05-14T06:41:06.361Z", + "tabs": [ + { + "id": "internal", + "label": "Internal Table Format", + "benchmarks": [ + { + "id": "ssb", + "name": "SSB", + "scale": "sf1000", + "queries": [ + "q1.1", + "q1.2", + "q1.3", + "q2.1", + "q2.2", + "q2.3", + "q3.1", + "q3.2", + "q3.3", + "q3.4", + "q4.1", + "q4.2", + "q4.3" + ], + "products": [ + { + "id": "doris", + "name": "Apache Doris", + "version": "4.1.0", + "machine": "32C(AWS.m8i.8xlarge)", + "clusterSize": 3, + "sourcePath": "benchmarks/ssb/sf1000/doris/results/aws.32C.json", + "totalRuntime": 11.559, + "queriesCompleted": 13, + "queriesTotal": 13, + "perQuery": { + "q1.1": 0.149, + "q1.2": 0.106, + "q1.3": 0.099, + "q2.1": 1.162, + "q2.2": 1.237, + "q2.3": 1.107, + "q3.1": 2.223, + "q3.2": 1.418, + "q3.3": 0.379, + "q3.4": 0.099, + "q4.1": 2.534, + "q4.2": 0.629, + "q4.3": 0.417 + } + }, + { + "id": "clickhouse", + "name": "ClickHouse", + "version": "25.8.1.8702", + "machine": "32C(aws)", + "clusterSize": 3, + "sourcePath": "benchmarks/ssb/sf1000/clickhouse/results/aws.32C.json", + "totalRuntime": 82.22, + "queriesCompleted": 9, + "queriesTotal": 13, + "perQuery": { + "q1.1": 3.873, + "q1.2": 3.057, + "q1.3": 3.247, + "q2.1": 11.955, + "q2.2": 8.417, + "q2.3": 7.331, + "q3.1": null, + "q3.2": null, + "q3.3": null, + "q3.4": null, + "q4.1": 24.052, + "q4.2": 10.52, + "q4.3": 9.768 + } + }, + { + "id": "redshift", + "name": "Redshift", + "version": "1.0.163480", + "machine": "16XLarge(aws)", + "clusterSize": 2, + "sourcePath": "benchmarks/ssb/sf1000/redshift/results/aws.16XLarge.json", + "totalRuntime": 30.06, + "queriesCompleted": 13, + "queriesTotal": 13, + "perQuery": { + "q1.1": 0.325, + "q1.2": 0.183, + "q1.3": 0.168, + "q2.1": 1.863, + "q2.2": 1.739, + "q2.3": 1.632, + "q3.1": 6.006, + "q3.2": 3.497, + "q3.3": 2.344, + "q3.4": 1.334, + "q4.1": 6.323, + "q4.2": 2.631, + "q4.3": 2.015 + } + }, + { + "id": "snowflake", + "name": "Snowflake", + "version": "9.38.4", + "machine": "XLarge(aws)", + "clusterSize": 1, + "sourcePath": "benchmarks/ssb/sf1000/snowflake/results/aws.XLarge.json", + "totalRuntime": 32.91, + "queriesCompleted": 13, + "queriesTotal": 13, + "perQuery": { + "q1.1": 1.708, + "q1.2": 1.327, + "q1.3": 1.368, + "q2.1": 3.214, + "q2.2": 2.884, + "q2.3": 2.916, + "q3.1": 3.15, + "q3.2": 2.57, + "q3.3": 2.462, + "q3.4": 1.653, + "q4.1": 3.789, + "q4.2": 2.951, + "q4.3": 2.918 + } + } + ] + }, + { + "id": "tpch", + "name": "TPC-H", + "scale": "sf1000", + "queries": [ + "q1", + "q2", + "q3", + "q4", + "q5", + "q6", + "q7", + "q8", + "q9", + "q10", + "q11", + "q12", + "q13", + "q14", + "q15", + "q16", + "q17", + "q18", + "q19", + "q20", + "q21", + "q22" + ], + "products": [ + { + "id": "doris", + "name": "Apache Doris", + "version": "4.1.0", + "machine": "32C(AWS.m8i.8xlarge)", + "clusterSize": 3, + "sourcePath": "benchmarks/tpch/sf1000/doris/results/aws.32C.json", + "totalRuntime": 53.766, + "queriesCompleted": 22, + "queriesTotal": 22, + "perQuery": { + "q1": 7.744, + "q2": 0.275, + "q3": 2.861, + "q4": 0.495, + "q5": 3.43, + "q6": 0.162, + "q7": 1.471, + "q8": 2.517, + "q9": 9.155, + "q10": 1.827, + "q11": 0.504, + "q12": 0.501, + "q13": 4.899, + "q14": 0.409, + "q15": 0.668, + "q16": 1.009, + "q17": 1.473, + "q18": 7.511, + "q19": 1.688, + "q20": 0.735, + "q21": 3.583, + "q22": 0.849 + } + }, + { + "id": "clickhouse", + "name": "ClickHouse", + "version": "25.8.1.8702", + "machine": "32C(aws)", + "clusterSize": 3, + "sourcePath": "benchmarks/tpch/sf1000/clickhouse/results/aws.32C.json", + "totalRuntime": 278.978, + "queriesCompleted": 13, + "queriesTotal": 22, + "perQuery": { + "q1": 35.98, + "q2": 11.053, + "q3": null, + "q4": 16.35, + "q5": null, + "q6": 12.058, + "q7": null, + "q8": null, + "q9": null, + "q10": null, + "q11": 5.619, + "q12": 14.954, + "q13": null, + "q14": 10.555, + "q15": null, + "q16": 3.171, + "q17": 77.529, + "q18": 50.024, + "q19": 27.343, + "q20": 9.16, + "q21": null, + "q22": 5.182 + } + }, + { + "id": "redshift", + "name": "Redshift", + "version": "1.0.163480", + "machine": "16XLarge(aws)", + "clusterSize": 2, + "sourcePath": "benchmarks/tpch/sf1000/redshift/results/aws.16XLarge.json", + "totalRuntime": 120.639, + "queriesCompleted": 22, + "queriesTotal": 22, + "perQuery": { + "q1": 9.471, + "q2": 2.06, + "q3": 5.5, + "q4": 4.3, + "q5": 3.689, + "q6": 0.324, + "q7": 3.8, + "q8": 3.175, + "q9": 12.441, + "q10": 5.55, + "q11": 0.908, + "q12": 1.526, + "q13": 13.056, + "q14": 1.704, + "q15": 3.017, + "q16": 2.686, + "q17": 3.112, + "q18": 15.102, + "q19": 4.742, + "q20": 3.943, + "q21": 16.363, + "q22": 4.17 + } + }, + { + "id": "snowflake", + "name": "Snowflake", + "version": "9.38.4", + "machine": "XLarge(aws)", + "clusterSize": 1, + "sourcePath": "benchmarks/tpch/sf1000/snowflake/results/aws.XLarge.json", + "totalRuntime": 102.493, + "queriesCompleted": 22, + "queriesTotal": 22, + "perQuery": { + "q1": 5.942, + "q2": 2.707, + "q3": 4.62, + "q4": 3.102, + "q5": 5.254, + "q6": 1.647, + "q7": 3.964, + "q8": 3.813, + "q9": 7.851, + "q10": 5.814, + "q11": 2.178, + "q12": 3.227, + "q13": 7.331, + "q14": 1.781, + "q15": 2.312, + "q16": 4.411, + "q17": 3.375, + "q18": 13.083, + "q19": 3.081, + "q20": 6.862, + "q21": 8.02, + "q22": 2.118 + } + } + ] + }, + { + "id": "tpcds", + "name": "TPC-DS", + "scale": "sf1000", + "queries": [ + "query01", + "query02", + "query03", + "query04", + "query05", + "query06", + "query07", + "query08", + "query09", + "query10", + "query11", + "query12", + "query13", + "query14", + "query14_1", + "query15", + "query16", + "query17", + "query18", + "query19", + "query20", + "query21", + "query22", + "query23", + "query23_1", + "query24", + "query24_1", + "query25", + "query26", + "query27", + "query28", + "query29", + "query30", + "query31", + "query32", + "query33", + "query34", + "query35", + "query36", + "query37", + "query38", + "query39", + "query39_1", + "query40", + "query41", + "query42", + "query43", + "query44", + "query45", + "query46", + "query47", + "query48", + "query49", + "query50", + "query51", + "query52", + "query53", + "query54", + "query55", + "query56", + "query57", + "query58", + "query59", + "query60", + "query61", + "query62", + "query63", + "query64", + "query65", + "query66", + "query67", + "query68", + "query69", + "query70", + "query71", + "query72", + "query73", + "query74", + "query75", + "query76", + "query77", + "query78", + "query79", + "query80", + "query81", + "query82", + "query83", + "query84", + "query85", + "query86", + "query87", + "query88", + "query89", + "query90", + "query91", + "query92", + "query93", + "query94", + "query95", + "query96", + "query97", + "query98", + "query99" + ], + "products": [ + { + "id": "doris", + "name": "Apache Doris", + "version": "4.1.0", + "machine": "32C(AWS.m8i.8xlarge)", + "clusterSize": 3, + "sourcePath": "benchmarks/tpcds/sf1000/doris/results/aws.32C.json", + "totalRuntime": 173.84, + "queriesCompleted": 103, + "queriesTotal": 103, + "perQuery": { + "query01": 0.54, + "query02": 0.658, + "query03": 0.171, + "query04": 7.144, + "query05": 0.747, + "query06": 0.492, + "query07": 0.339, + "query08": 0.41, + "query09": 4.098, + "query10": 0.318, + "query11": 4.762, + "query12": 0.157, + "query13": 0.448, + "query14": 6.239, + "query14_1": 5.773, + "query15": 0.285, + "query16": 0.245, + "query17": 1.619, + "query18": 0.734, + "query19": 0.29, + "query20": 0.162, + "query21": 0.121, + "query22": 0.784, + "query23": 11.874, + "query23_1": 11.952, + "query24": 3.469, + "query24_1": 3.462, + "query25": 0.965, + "query26": 0.176, + "query27": 0.339, + "query28": 3.488, + "query29": 0.831, + "query30": 0.247, + "query31": 1.555, + "query32": 0.115, + "query33": 0.358, + "query34": 0.315, + "query35": 0.925, + "query36": 0.338, + "query37": 0.1, + "query38": 6.081, + "query39": 0.263, + "query39_1": 0.217, + "query40": 0.148, + "query41": 0.115, + "query42": 0.107, + "query43": 0.348, + "query44": 1.026, + "query45": 0.284, + "query46": 0.482, + "query47": 2.19, + "query48": 0.304, + "query49": 0.666, + "query50": 0.367, + "query51": 3.737, + "query52": 0.104, + "query53": 0.255, + "query54": 0.315, + "query55": 0.138, + "query56": 0.376, + "query57": 1.301, + "query58": 0.356, + "query59": 1.7, + "query60": 0.368, + "query61": 0.298, + "query62": 0.471, + "query63": 0.237, + "query64": 2.8, + "query65": 3.188, + "query66": 0.393, + "query67": 21.909, + "query68": 0.278, + "query69": 0.956, + "query70": 2.202, + "query71": 0.983, + "query72": 2.41, + "query73": 0.15, + "query74": 3.935, + "query75": 3.168, + "query76": 0.953, + "query77": 0.287, + "query78": 9.614, + "query79": 1.646, + "query80": 0.64, + "query81": 0.374, + "query82": 0.236, + "query83": 0.31, + "query84": 0.183, + "query85": 0.812, + "query86": 0.697, + "query87": 6.302, + "query88": 3.261, + "query89": 0.425, + "query90": 0.132, + "query91": 0.206, + "query92": 0.07, + "query93": 1.049, + "query94": 0.188, + "query95": 0.246, + "query96": 0.353, + "query97": 2.791, + "query98": 0.542, + "query99": 0.852 + } + }, + { + "id": "clickhouse", + "name": "ClickHouse", + "version": "25.8.1.8909", + "machine": "32C(aws)", + "clusterSize": 3, + "sourcePath": "benchmarks/tpcds/sf1000/clickhouse/results/aws.32C.json", + "totalRuntime": 1913.903, + "queriesCompleted": 70, + "queriesTotal": 103, + "perQuery": { + "query01": 3.588, + "query02": 15.8, + "query03": null, + "query04": null, + "query05": 30.833, + "query06": null, + "query07": 11.171, + "query08": 96.482, + "query09": 22.78, + "query10": null, + "query11": null, + "query12": 2.036, + "query13": 50.597, + "query14": null, + "query14_1": null, + "query15": 37.795, + "query16": null, + "query17": null, + "query18": null, + "query19": null, + "query20": 3.667, + "query21": 2.652, + "query22": 2.393, + "query23": 115.795, + "query23_1": 103.462, + "query24": 45.273, + "query24_1": 34.561, + "query25": null, + "query26": 5.051, + "query27": 10.925, + "query28": 21.889, + "query29": null, + "query30": null, + "query31": 22.263, + "query32": 1.93, + "query33": 7.11, + "query34": 8.148, + "query35": null, + "query36": 7.949, + "query37": 2.874, + "query38": 219.46, + "query39": 5.681, + "query39_1": 5.581, + "query40": 12.631, + "query41": 0.148, + "query42": null, + "query43": null, + "query44": 7.575, + "query45": 21.249, + "query46": 12.581, + "query47": null, + "query48": 38.676, + "query49": null, + "query50": 31.223, + "query51": 17.045, + "query52": null, + "query53": 10.587, + "query54": 37.603, + "query55": null, + "query56": 7.051, + "query57": null, + "query58": null, + "query59": 40.066, + "query60": 7.403, + "query61": 15.461, + "query62": 7.831, + "query63": 11.724, + "query64": null, + "query65": 22.807, + "query66": null, + "query67": null, + "query68": 13.766, + "query69": null, + "query70": 15.993, + "query71": 7.327, + "query72": null, + "query73": 7.586, + "query74": null, + "query75": null, + "query76": 4.984, + "query77": 8.473, + "query78": 0.199, + "query79": 21.412, + "query80": 41.418, + "query81": null, + "query82": 6.274, + "query83": 1.741, + "query84": 2.523, + "query85": 5.967, + "query86": 1.487, + "query87": 221.924, + "query88": 44.311, + "query89": 16.301, + "query90": 2.589, + "query91": 1.166, + "query92": 1.47, + "query93": 140.244, + "query94": null, + "query95": null, + "query96": 5.169, + "query97": 120.58, + "query98": 7.779, + "query99": 13.813 + } + }, + { + "id": "redshift", + "name": "Redshift", + "version": "1.0.162991", + "machine": "16XLarge(aws)", + "clusterSize": 2, + "sourcePath": "benchmarks/tpcds/sf1000/redshift/results/aws.16XLarge.json", + "totalRuntime": 395.495, + "queriesCompleted": 103, + "queriesTotal": 103, + "perQuery": { + "query01": 2.788, + "query02": 3.305, + "query03": 0.701, + "query04": 22.186, + "query05": 1.043, + "query06": 0.388, + "query07": 0.615, + "query08": 0.53, + "query09": 3.715, + "query10": 0.795, + "query11": 23.508, + "query12": 0.369, + "query13": 0.795, + "query14": 13.389, + "query14_1": 12.756, + "query15": 1.544, + "query16": 1.429, + "query17": 0.66, + "query18": 0.904, + "query19": 0.384, + "query20": 0.295, + "query21": 0.25, + "query22": 4.495, + "query23": 27.114, + "query23_1": 27.049, + "query24": 4.804, + "query24_1": 4.938, + "query25": 0.769, + "query26": 0.509, + "query27": 0.674, + "query28": 4.929, + "query29": 0.783, + "query30": 2.657, + "query31": 4.512, + "query32": 0.36, + "query33": 1.002, + "query34": 0.913, + "query35": 2.21, + "query36": 0.659, + "query37": 0.322, + "query38": 7.7, + "query39": 0.541, + "query39_1": 0.509, + "query40": 0.319, + "query41": 0.335, + "query42": 0.285, + "query43": 1.268, + "query44": 1.41, + "query45": 2.387, + "query46": 2.012, + "query47": 15.129, + "query48": 0.74, + "query49": 0.699, + "query50": 1.567, + "query51": 3.653, + "query52": 0.274, + "query53": 0.584, + "query54": 0.515, + "query55": 0.268, + "query56": 0.888, + "query57": 10.113, + "query58": 0.566, + "query59": 6.29, + "query60": 0.918, + "query61": 0.591, + "query62": 1.183, + "query63": 0.529, + "query64": 5.672, + "query65": 5.613, + "query66": 0.961, + "query67": 43.631, + "query68": 0.614, + "query69": 5.052, + "query70": 2.103, + "query71": 2.35, + "query72": 3.298, + "query73": 0.481, + "query74": 12.343, + "query75": 5.562, + "query76": 1.626, + "query77": 0.668, + "query78": 15.873, + "query79": 4.764, + "query80": 0.759, + "query81": 3.366, + "query82": 0.59, + "query83": 0.488, + "query84": 0.369, + "query85": 0.879, + "query86": 0.539, + "query87": 10.004, + "query88": 8.761, + "query89": 0.814, + "query90": 0.767, + "query91": 0.35, + "query92": 0.354, + "query93": 1.393, + "query94": 2.226, + "query95": 0.737, + "query96": 1.226, + "query97": 5.773, + "query98": 1.322, + "query99": 1.846 + } + }, + { + "id": "snowflake", + "name": "Snowflake", + "version": "9.37.1", + "machine": "XLarge(aws)", + "clusterSize": 1, + "sourcePath": "benchmarks/tpcds/sf1000/snowflake/results/aws.XLarge.json", + "totalRuntime": 464.562, + "queriesCompleted": 103, + "queriesTotal": 103, + "perQuery": { + "query01": 1.834, + "query02": 2.889, + "query03": 1.716, + "query04": 34.019, + "query05": 3.802, + "query06": 2.381, + "query07": 3.226, + "query08": 2.071, + "query09": 4.531, + "query10": 3.554, + "query11": 22.791, + "query12": 2.215, + "query13": 3.13, + "query14": 8.642, + "query14_1": 7.874, + "query15": 2.457, + "query16": 2.552, + "query17": 5.535, + "query18": 4.008, + "query19": 2.429, + "query20": 1.496, + "query21": 2.414, + "query22": 3.478, + "query23": 14.167, + "query23_1": 14.618, + "query24": 4.597, + "query24_1": 4.47, + "query25": 3.697, + "query26": 1.978, + "query27": 2.65, + "query28": 5.861, + "query29": 4.535, + "query30": 1.072, + "query31": 3.678, + "query32": 1.511, + "query33": 2.687, + "query34": 4.356, + "query35": 4.974, + "query36": 2.051, + "query37": 1.92, + "query38": 7.22, + "query39": 5.1, + "query39_1": 2.67, + "query40": 2.595, + "query41": 1.328, + "query42": 1.341, + "query43": 1.738, + "query44": 3.306, + "query45": 2.768, + "query46": 2.849, + "query47": 5.182, + "query48": 3.155, + "query49": 3.219, + "query50": 4.591, + "query51": 3.97, + "query52": 1.354, + "query53": 1.888, + "query54": 2.279, + "query55": 1.651, + "query56": 2.342, + "query57": 3.152, + "query58": 1.984, + "query59": 3.137, + "query60": 2.882, + "query61": 2.795, + "query62": 2.316, + "query63": 1.846, + "query64": 9.575, + "query65": 3.718, + "query66": 3.758, + "query67": 7.539, + "query68": 2.462, + "query69": 3.01, + "query70": 2.448, + "query71": 24.39, + "query72": 1.082, + "query73": 1.58, + "query74": 13.536, + "query75": 11.545, + "query76": 3.003, + "query77": 2.719, + "query78": 12.884, + "query79": 4.291, + "query80": 4.495, + "query81": 2.319, + "query82": 1.902, + "query83": 2.721, + "query84": 1.783, + "query85": 4.48, + "query86": 2.262, + "query87": 10.484, + "query88": 3.412, + "query89": 2.954, + "query90": 1.84, + "query91": 1.72, + "query92": 1.546, + "query93": 4.116, + "query94": 2.625, + "query95": 3.152, + "query96": 2.722, + "query97": 5.426, + "query98": 7.484, + "query99": 3.055 + } + } + ] + } + ] + }, + { + "id": "iceberg", + "label": "Iceberg Table Format", + "benchmarks": [ + { + "id": "ssb", + "name": "SSB", + "scale": "sf1000", + "queries": [ + "q1.1", + "q1.2", + "q1.3", + "q2.1", + "q2.2", + "q2.3", + "q3.1", + "q3.2", + "q3.3", + "q3.4", + "q4.1", + "q4.2", + "q4.3" + ], + "products": [ + { + "id": "doris", + "name": "Apache Doris", + "version": "4.1.0", + "machine": "32C(AWS.m8i.8xlarge)", + "clusterSize": 3, + "sourcePath": "benchmarks/ssb/sf1000/doris_iceberg_rest_s3_parquet/results/aws.32C.json", + "totalRuntime": 58.591, + "queriesCompleted": 13, + "queriesTotal": 13, + "perQuery": { + "q1.1": 2.547, + "q1.2": 1.224, + "q1.3": 1.134, + "q2.1": 7.299, + "q2.2": 6.747, + "q2.3": 6.828, + "q3.1": 4.375, + "q3.2": 3.363, + "q3.3": 3.103, + "q3.4": 1.178, + "q4.1": 8.456, + "q4.2": 5.524, + "q4.3": 6.813 + } + }, + { + "id": "trino", + "name": "Trino", + "version": "479", + "machine": "32C(AWS.m8i.8xlarge)", + "clusterSize": 3, + "sourcePath": "benchmarks/ssb/sf1000/trino_iceberg_rest_s3_parquet/results/aws.32C.json", + "totalRuntime": 159.213, + "queriesCompleted": 13, + "queriesTotal": 13, + "perQuery": { + "q1.1": 5.206, + "q1.2": 6.52, + "q1.3": 6.397, + "q2.1": 15.636, + "q2.2": 13.394, + "q2.3": 12.972, + "q3.1": 16.832, + "q3.2": 11.432, + "q3.3": 11.101, + "q3.4": 7.688, + "q4.1": 22.958, + "q4.2": 16.909, + "q4.3": 12.168 + } + } + ] + }, + { + "id": "tpcds", + "name": "TPC-DS", + "scale": "sf1000", + "queries": [ + "query01", + "query02", + "query03", + "query04", + "query05", + "query06", + "query07", + "query08", + "query09", + "query10", + "query11", + "query12", + "query13", + "query14", + "query14_1", + "query15", + "query16", + "query17", + "query18", + "query19", + "query20", + "query21", + "query22", + "query23", + "query23_1", + "query24", + "query24_1", + "query25", + "query26", + "query27", + "query28", + "query29", + "query30", + "query31", + "query32", + "query33", + "query34", + "query35", + "query36", + "query37", + "query38", + "query39", + "query39_1", + "query40", + "query41", + "query42", + "query43", + "query44", + "query45", + "query46", + "query47", + "query48", + "query49", + "query50", + "query51", + "query52", + "query53", + "query54", + "query55", + "query56", + "query57", + "query58", + "query59", + "query60", + "query61", + "query62", + "query63", + "query64", + "query65", + "query66", + "query67", + "query68", + "query69", + "query70", + "query71", + "query72", + "query73", + "query74", + "query75", + "query76", + "query77", + "query78", + "query79", + "query80", + "query81", + "query82", + "query83", + "query84", + "query85", + "query86", + "query87", + "query88", + "query89", + "query90", + "query91", + "query92", + "query93", + "query94", + "query95", + "query96", + "query97", + "query98", + "query99" + ], + "products": [ + { + "id": "doris", + "name": "Apache Doris", + "version": "4.1.0", + "machine": "32C(AWS.m8i.8xlarge)", + "clusterSize": 3, + "sourcePath": "benchmarks/tpcds/sf1000/doris_iceberg_rest_s3_parquet/results/aws.32C.json", + "totalRuntime": 823.896, + "queriesCompleted": 103, + "queriesTotal": 103, + "perQuery": { + "query01": 0.755, + "query02": 3.859, + "query03": 1.087, + "query04": 116.99, + "query05": 3.725, + "query06": 2.412, + "query07": 2.814, + "query08": 1.157, + "query09": 12.154, + "query10": 2.699, + "query11": 202.115, + "query12": 0.362, + "query13": 4.68, + "query14": 8.634, + "query14_1": 9.942, + "query15": 2.48, + "query16": 1.402, + "query17": 6.427, + "query18": 3.566, + "query19": 1.033, + "query20": 0.478, + "query21": 0.725, + "query22": 2.033, + "query23": 19.787, + "query23_1": 19.604, + "query24": 2.812, + "query24_1": 2.861, + "query25": 5.136, + "query26": 2.376, + "query27": 4.164, + "query28": 13.992, + "query29": 7.553, + "query30": 0.495, + "query31": 1.829, + "query32": 0.423, + "query33": 2.29, + "query34": 2.804, + "query35": 1.703, + "query36": 1.549, + "query37": 0.842, + "query38": 9.081, + "query39": 1.119, + "query39_1": 0.823, + "query40": 0.982, + "query41": 0.164, + "query42": 0.733, + "query43": 1.811, + "query44": 5.479, + "query45": 2.071, + "query46": 3.683, + "query47": 3.178, + "query48": 2.696, + "query49": 16.43, + "query50": 3.719, + "query51": 4.716, + "query52": 0.813, + "query53": 1.295, + "query54": 4.406, + "query55": 0.683, + "query56": 2.617, + "query57": 1.798, + "query58": 1.446, + "query59": 6.729, + "query60": 2.149, + "query61": 9.615, + "query62": 0.869, + "query63": 1.198, + "query64": 18.081, + "query65": 5.818, + "query66": 2.358, + "query67": 35.839, + "query68": 5.25, + "query69": 1.786, + "query70": 3.733, + "query71": 3.429, + "query72": 11.946, + "query73": 4.262, + "query74": 65.353, + "query75": 7.533, + "query76": 3.2, + "query77": 2.894, + "query78": 18.062, + "query79": 5.616, + "query80": 5.059, + "query81": 0.595, + "query82": 0.998, + "query83": 0.929, + "query84": 0.366, + "query85": 1.623, + "query86": 0.838, + "query87": 10.594, + "query88": 11.401, + "query89": 1.507, + "query90": 2.43, + "query91": 0.396, + "query92": 0.352, + "query93": 5.031, + "query94": 0.888, + "query95": 1.312, + "query96": 1.562, + "query97": 6.361, + "query98": 2.682, + "query99": 1.76 + } + }, + { + "id": "trino", + "name": "Trino", + "version": "479", + "machine": "32C(AWS.m8i.8xlarge)", + "clusterSize": 3, + "sourcePath": "benchmarks/tpcds/sf1000/trino_iceberg_rest_s3_parquet/results/aws.32C.json", + "totalRuntime": 2366.332, + "queriesCompleted": 103, + "queriesTotal": 103, + "perQuery": { + "query01": 3.807, + "query02": 13.557, + "query03": 4.154, + "query04": 191.955, + "query05": 12.684, + "query06": 5.177, + "query07": 8.308, + "query08": 5.013, + "query09": 30.093, + "query10": 6.64, + "query11": 118.555, + "query12": 2.868, + "query13": 29.608, + "query14": 85.887, + "query14_1": 57.319, + "query15": 4.405, + "query16": 19.309, + "query17": 12.828, + "query18": 8.411, + "query19": 5.55, + "query20": 3.097, + "query21": 4.586, + "query22": 8.707, + "query23": 241.021, + "query23_1": 239.289, + "query24": 18.576, + "query24_1": 18.95, + "query25": 9.164, + "query26": 6.069, + "query27": 7.023, + "query28": 19.518, + "query29": 17.343, + "query30": 3.53, + "query31": 14.882, + "query32": 4.209, + "query33": 8.202, + "query34": 8.025, + "query35": 7.955, + "query36": 6.658, + "query37": 6.214, + "query38": 32.814, + "query39": 9.699, + "query39_1": 8.378, + "query40": 3.667, + "query41": 1.325, + "query42": 3.521, + "query43": 5.386, + "query44": 11.819, + "query45": 3.806, + "query46": 11.821, + "query47": 39.339, + "query48": 18.842, + "query49": 16.682, + "query50": 27.159, + "query51": 12.547, + "query52": 3.632, + "query53": 4.624, + "query54": 25.551, + "query55": 3.836, + "query56": 7.886, + "query57": 21.524, + "query58": 6.499, + "query59": 42.93, + "query60": 8.449, + "query61": 11.051, + "query62": 6.503, + "query63": 4.74, + "query64": 27.559, + "query65": 20.174, + "query66": 8.096, + "query67": 61.155, + "query68": 14.52, + "query69": 5.642, + "query70": 17.216, + "query71": 8.43, + "query72": 104.087, + "query73": 8.033, + "query74": 83.114, + "query75": 29.998, + "query76": 10.296, + "query77": 9.473, + "query78": 61.117, + "query79": 17.879, + "query80": 13.131, + "query81": 4.222, + "query82": 10.519, + "query83": 4.245, + "query84": 2.974, + "query85": 7.624, + "query86": 3.932, + "query87": 34.138, + "query88": 27.75, + "query89": 5.227, + "query90": 3.804, + "query91": 2.835, + "query92": 2.818, + "query93": 27.401, + "query94": 9.962, + "query95": 42.328, + "query96": 5.024, + "query97": 24.588, + "query98": 3.569, + "query99": 10.276 + } + } + ] + } + ] + } + ] +} diff --git a/src/pages/why-doris/benchmarks/index.tsx b/src/pages/why-doris/benchmarks/index.tsx new file mode 100644 index 0000000000000..5907927c3bb1d --- /dev/null +++ b/src/pages/why-doris/benchmarks/index.tsx @@ -0,0 +1,6 @@ +import React, { JSX } from 'react'; +import BenchmarkNext from '@site/src/components/why-doris-next/BenchmarkNext'; + +export default function BenchmarksPage(): JSX.Element { + return ; +}