Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
12eccc9
Initial commit with task details
konard Oct 4, 2026
229ae26
Rewrite Rust benchmarks on stable doublets 0.5.0 and rusqlite 0.40
konard Oct 4, 2026
29ec139
Rewrite C# benchmarks on net10.0 with the same lifecycle as Rust
konard Oct 4, 2026
4f8d0c5
Rust: external references for objects stores, clamp repetitions to 1.…
konard Oct 4, 2026
ab53110
C#: AVL index trees for the united store; delete and tree experiments
konard Oct 4, 2026
40e676b
Report script: README sections in the category/language/bits/size hie…
konard Oct 4, 2026
105f9a6
Less default work for objects: one blog post takes hundreds of links
konard Oct 4, 2026
4d83c84
CI: stable Rust and .NET 10 checks, benchmark matrix that publishes R…
konard Oct 4, 2026
48d7fa0
README: methodology, local runs, notes and one generated results sect…
konard Oct 4, 2026
2ac09f4
Remove the placeholder file
konard Oct 4, 2026
b8c842e
Temporarily run the full benchmarks on the pull request branch
konard Oct 4, 2026
e965c93
Rust: keep the whole memory after doublets grow it
konard Oct 4, 2026
4a91975
Run the full benchmarks only on main; skip objects at 100,000,000 rec…
konard Oct 4, 2026
9100614
Update benchmark results [skip ci]
Oct 4, 2026
760128c
Fix CodeFactor issues: declare arithmetic precedence in Dataset.cs, s…
konard Oct 5, 2026
579071b
Report: round to three significant digits before choosing the unit, s…
konard Oct 5, 2026
ea040a2
CI: actions/checkout v7 in the auto-merge and C++ workflows
konard Oct 5, 2026
4e9cec4
Make the READMEs pass markdownlint (Codacy MD013, MD022, MD024)
konard Oct 5, 2026
1346e64
Fix the Codacy SonarC# issues
konard Oct 5, 2026
0c0366f
SQLite: read the inserted id with last_insert_rowid in both languages…
konard Oct 5, 2026
58c7540
Harness: warm up for at least a second in both languages
konard Oct 5, 2026
4e140b6
Objects: share strings and checksum without allocations, so only the …
konard Oct 5, 2026
9b9cb32
README: note the linked list of the C# split stores
konard Oct 5, 2026
f199649
Report: one-line docstrings, which Codacy's D212 and D213 both accept
konard Oct 5, 2026
e500f13
README: why 10,000,000 links and 1,000,000 blog posts are the largest…
konard Oct 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
version: 2
updates:
- package-ecosystem: nuget
directory: "/"
directory: "/csharp"
schedule:
interval: daily
open-pull-requests-limit: 10
- package-ecosystem: cargo
directory: "/rust"
schedule:
interval: daily
open-pull-requests-limit: 10
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
2 changes: 1 addition & 1 deletion .github/workflows/AutoMerge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
auto-merge:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v7
- uses: ahmadnassri/action-dependabot-auto-merge@v2
with:
target: minor
Expand Down
198 changes: 0 additions & 198 deletions .github/workflows/CI.yml

This file was deleted.

136 changes: 136 additions & 0 deletions .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
name: Benchmarks

# Every job measures one README table (language, category, bits, size) with all its variants on one runner,
# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline
# on small sizes; pushes to main publish the results to README.md and README.ru.md.
on:
push:
branches: [main]
paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']
pull_request:
paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']
workflow_dispatch:
inputs:
sizes:
description: JSON array of sizes (objects skip 10,000,000 and 100,000,000)
default: '[100000, 1000000, 10000000]'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

env:
CARGO_TERM_COLOR: always

jobs:
report-tests:
name: Report script tests
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
with:
python-version: '3.13'
- run: pip install -r scripts/requirements.txt
- run: python -m unittest discover -s scripts -v
- run: npx --yes markdownlint-cli@0.49.1 README.md README.ru.md

benchmark:
name: ${{ matrix.language }} ${{ matrix.category }} ${{ matrix.bits }} bit ${{ matrix.size }}
runs-on: ubuntu-latest
timeout-minutes: 355
strategy:
fail-fast: false
matrix:
language: [rust, csharp]
category: [links, objects]
bits: [32, 64]
size: ${{ fromJSON(inputs.sizes || (github.event_name == 'pull_request' && '[1000]') || '[100000, 1000000, 10000000]') }}
exclude:
# One million blog posts already take an hour in C#; ten millions would not fit into a job.
- category: objects
size: 10000000
- category: objects
size: 100000000
steps:
- uses: actions/checkout@v7
- if: matrix.language == 'rust'
uses: dtolnay/rust-toolchain@stable
- if: matrix.language == 'rust'
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
- if: matrix.language == 'rust'
run: |
cargo build --release --manifest-path rust/Cargo.toml
echo "BENCHMARK=rust/target/release/sqlite-vs-doublets" >> "$GITHUB_ENV"
- if: matrix.language == 'csharp'
uses: actions/setup-dotnet@v6
with:
global-json-file: csharp/global.json
- if: matrix.language == 'csharp'
run: |
dotnet build -c Release csharp/SQLiteVSDoublets
echo "BENCHMARK=dotnet csharp/SQLiteVSDoublets/bin/Release/net10.0/sqlite-vs-doublets.dll" >> "$GITHUB_ENV"
- name: Benchmark
run: |
name=${{ matrix.category }}-${{ matrix.language }}-${{ matrix.bits }}-${{ matrix.size }}
echo "NAME=$name" >> "$GITHUB_ENV"
$BENCHMARK ${{ matrix.category }} ${{ matrix.bits }} ${{ matrix.size }} \
--directory "$RUNNER_TEMP/storage" --output "$RUNNER_TEMP/measured.json"
machine="$(. /etc/os-release && echo "$PRETTY_NAME"), $(lscpu | sed -n 's/^Model name: *//p' | head -1)"
machine="$machine, $(nproc) cores, $(awk '/^MemTotal/ { printf "%.0f", $2 / 1048576 }' /proc/meminfo) GiB"
mkdir results
jq --arg run_url "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \
--arg date "$(date -u +%Y-%m-%d)" --arg machine "$machine" \
'. + {run_url: $run_url, date: $date, machine: $machine}' \
"$RUNNER_TEMP/measured.json" > "results/$name.json"
- uses: actions/upload-artifact@v7
with:
name: results-${{ env.NAME }}
path: results/${{ env.NAME }}.json

report:
name: Report
needs: [report-tests, benchmark]
# Publishes the finished tables even if some jobs failed; the missing ones keep their previous results.
if: ${{ !cancelled() && needs.report-tests.result == 'success' }}
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
steps:
- uses: actions/checkout@v7
with:
ref: ${{ github.event_name == 'pull_request' && github.sha || github.ref_name }}
- uses: actions/setup-python@v7
with:
python-version: '3.13'
- run: pip install -r scripts/requirements.txt
- uses: actions/download-artifact@v8
with:
pattern: results-*
merge-multiple: true
path: ${{ github.event_name == 'pull_request' && format('{0}/results', runner.temp) || 'docs/benchmarks/results' }}
- if: github.event_name == 'pull_request'
name: Check the report
run: |
python scripts/benchmark_report.py "$RUNNER_TEMP/results" >> "$GITHUB_STEP_SUMMARY"
python scripts/benchmark_report.py "$RUNNER_TEMP/results" --readme README.md --readme README.ru.md
npx --yes markdownlint-cli@0.49.1 README.md README.ru.md
- if: github.event_name != 'pull_request'
name: Publish the report
run: |
python scripts/benchmark_report.py docs/benchmarks/results \
--readme README.md --readme README.ru.md --charts docs/benchmarks
git config user.email 'linksplatform@gmail.com'
git config user.name 'LinksPlatformBencher'
git add README.md README.ru.md docs/benchmarks
git diff --staged --quiet && exit 0
git commit -m 'Update benchmark results [skip ci]'
for attempt in 1 2 3; do
git pull --rebase origin "$GITHUB_REF_NAME" && git push origin "HEAD:$GITHUB_REF_NAME" && exit 0
sleep 10
done
exit 1
6 changes: 3 additions & 3 deletions .github/workflows/cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v7
with:
submodules: true
- name: Setup clang
Expand Down Expand Up @@ -59,7 +59,7 @@ jobs:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v7
with:
submodules: true
- name: Read package information
Expand All @@ -76,7 +76,7 @@ jobs:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v7
with:
submodules: true
- name: Read project information
Expand Down
Loading
Loading