Skip to content

Instantly share code, notes, and snippets.

View ribomation's full-sized avatar

Ribomation ribomation

View GitHub Profile
@ribomation
ribomation / calc.erl
Created January 29, 2024 09:45
1BRC - Erlang
-module(calc).
-export([start/0, start/1, launch/1]).
-export([
reader_loop/2,
aggregator_loop/2,
writer_loop/0
]).
start() -> launch(filename(data_tiny)).
start(Size) -> launch(filename(Size)).
@ribomation
ribomation / calculate-average-await.js
Created January 25, 2024 13:16
1BRC JavaScript / Node.js
import {createReadStream} from 'node:fs';
import * as readline from 'node:readline/promises';
const start_time = process.hrtime();
const data = new Map();
const filename = process.argv[2] || '../../../data/weather-data-1M.csv';
console.log('filename: %s\n----', filename);
const fileStream = createReadStream(filename);
@ribomation
ribomation / calculate-average.pl
Created January 23, 2024 12:38
1BRC implementations in Python and Perl
use strict;
use warnings;
use Time::HiRes qw(gettimeofday tv_interval);
my $start_time = [ gettimeofday ];
my $filename = '../../data/weather-data-100K.csv';
$filename = $ARGV[0] if (@ARGV);
print "filename: $filename\n----\n";
my %data;
@ribomation
ribomation / heap-estimate.cxx
Created January 18, 2024 14:03
Memory size estimation of std::pmr container
#include <iostream>
#include <string_view>
#include <array>
#include <unordered_map>
#include "memory-mapped-file.hxx"
#include "measurement.hxx"
#include "aggregation.hxx"
#include "util.hxx"
#include "spy-pmr.hxx"
@ribomation
ribomation / aggregation.hxx
Created January 18, 2024 12:03
Ambitious optimization of 1BRC using Modern C++
#pragma once
#include <ostream>
#include <algorithm>
#include <limits>
#include <format>
namespace ribomation::brc {
struct Aggregation {
unsigned count = 0;
@ribomation
ribomation / calculate-average.cxx
Last active January 16, 2024 15:29
Simple implementation of 1BRC in Moden C++
#include <iostream>
#include <fstream>
#include <string>
#include <unordered_map>
#include <map>
#include <algorithm>
#include <format>
#include <limits>
#include "util.hxx"
@ribomation
ribomation / generate-data.cxx
Created January 15, 2024 13:44
Generates weather-data using C++ as input for the 1 Billion Row Challenge (1BRC)
#include <iostream>
#include <fstream>
#include <string>
#include <random>
#include <utility>
#include <vector>
#include <format>
#include <cmath>
#include "util.hxx"
@ribomation
ribomation / CalculateAverage.java
Created January 10, 2024 14:30
1BRC - Baseline solution
package ribomation;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Locale;
import java.util.stream.Collector;
import java.util.stream.Collectors;
public class CalculateAverage {
import groovy.transform.*
@ToString
@EqualsAndHashCode
class Crime implements Comparable<Crime> {
String title, place, description
Date date
public int compareTo(Crime that) { this.date <=> that.date }
}
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import org.w3c.dom.*
import javax.xml.parsers.DocumentBuilderFactory
import java.text.ParseException
class CrimesList_shorter {
public static final String URL = "http://brottsplatskartan.se/api.php?action=getEvents&period="