HN user

exAspArk

155 karma
Posts25
Comments45
View on HN
gettelio.com 6mo ago

Show HN: Telio – AI agents for call/text support, built on sandboxed lakehouses

exAspArk
2pts0
bemidb.com 1y ago

Show HN: BemiDB – Open-source data warehouse with zero-ETL

exAspArk
13pts2
blog.bemi.io 1y ago

Product Analytics Queries Without Database Meltdown

exAspArk
3pts0
blog.bemi.io 1y ago

Cloud Data Analytics Is a Scam

exAspArk
4pts0
blog.bemi.io 1y ago

Data Analytics with PostgreSQL: The Ultimate Guide

exAspArk
2pts0
bemidb.com 1y ago

BemiDB – Zero-ETL Analytics on Postgres

exAspArk
5pts1
github.com 1y ago

Show HN: BemiDB – Postgres read replica optimized for analytics

exAspArk
209pts117
blog.bemi.io 1y ago

It's Time to Rethink Event Sourcing

exAspArk
4pts0
blog.bemi.io 2y ago

Choosing the Right Audit Trail Approach in Ruby

exAspArk
46pts7
blog.bemi.io 2y ago

How Change Data Capture Powers Modern Apps

exAspArk
2pts0
exaspark.medium.com 2y ago

The Ultimate Guide to PostgreSQL Data Change Tracking

exAspArk
3pts0
bemi.io 2y ago

Bemi: Automatic PostgreSQL Audit Trail

exAspArk
2pts0
github.com 2y ago

Show HN: Bemi – context-aware data change tracking for Prisma

exAspArk
3pts0
github.com 2y ago

Show HN: Bemi for TypeORM – automatic data change tracking

exAspArk
4pts0
bemi.io 2y ago

Show HN: Bemi – data versioning and time travel for PostgreSQL

exAspArk
14pts1
bemi.io 2y ago

Show HN: Bemi, enabling Event Sourcing for any database

exAspArk
6pts0
www.angellist.com 3y ago

Forking AngelList

exAspArk
2pts0
exaspark.medium.com 5y ago

Top Ways to Implement Real-Time Rich Text Editor (Ranked by Complexity)

exAspArk
3pts0
engineering.universe.com 7y ago

Improving Browser Performance 10x

exAspArk
10pts0
www.workflowci.com 7y ago

WorkflowCI – IFTTT for developers

exAspArk
1pts0
www.workflowci.com 7y ago

WorkflowCI – IFTTT for developers

exAspArk
50pts10
engineering.universe.com 8y ago

Introduction to Concurrency Models with Ruby: Actors, CSP, STM, Guilds

exAspArk
4pts0
engineering.universe.com 8y ago

Introduction to concurrency models with Ruby. Part I

exAspArk
6pts0
engineering.universe.com 8y ago

Batching – A powerful way to solve N+1 queries every Rubyist should know

exAspArk
10pts0
github.com 8y ago

GraphQL-Guard: A Simple Authorization Gem for GraphQL (Ruby)

exAspArk
1pts0

There are a few different approaches. The main categories, from simplest to most complex:

1) Read replicas with copied data. The most straightforward, allowing using the same SQL syntax and tooling. Examples: Postgres read replica and BemiDB (disclaimer: I'm a contributor)

2) Operational databases with integrations. Designed for sub-second real-time, bring their own extended SQL syntax for things like window functions. Examples: Materialize and RisingWave

3) Analytical databases with syncing. Allow writing and reading directly, optimized for analytical workloads. Examples: ClickHouse and DuckDB

4) Data warehouses with ETL. Great for large volumes of data, traditionally used with ETL batch processing. Examples: Snowflake and Redshift

Hey HN! We’re Evgeny and Arjun. We’ve built a managed version of BemiDB that syncs with your existing PostgreSQL database and gives you fast analytical queries without heavy ETL pipelines.

BemiDB Cloud automatically replicates your data into an Apache Iceberg table stored in your own S3-compatible bucket. The data is compressed columnar Parquet under the hood. We embed DuckDB for query execution, and we speak the Postgres wire protocol so you can use all your existing ORMs, BI tools, or notebooks.

We’ve seen teams push Postgres read replicas too far for analytics or wrangle big ETL flows. We’re aiming for something simpler. Instead of standing up a data warehouse with complex pipelines, you can point BemiDB at your Postgres instance, click to sync, and start querying. All data remains in an open format so you aren’t locked in.

We’d love your feedback! Check us out at https://bemidb.com and our open source repo at https://github.com/BemiHQ/BemiDB. What do you think?

Our plan is to make BemiDB work with dbt by leveraging the Postgres-compatibility (supported dbt adapters https://docs.getdbt.com/docs/trusted-adapters). So it should be possible to transform data from Postgres or directly from BemiDB, which may actually perform better.

You're right, the data engineering world is complex, constantly evolving, and has many various solutions. I'd also like to know about any good resources that people use :)

For us, we mostly talked to many potential users asking about their data setups and challenges, and had many conversations with friends and experts in this field. I also read a few weekly newsletters, substracks, and follow people in this space on X (many recently started posting on Bluesky). For a deeper research, reading docs and specs, experimenting, watching talks, listening to podcasts, reading subreddits, etc.

Our initial approach is to do full table re-syncs periodically. Our next step is to enable incremental data syncing by supporting insert/update/delete according to the Iceberg spec. In short, it'd produce "diff" Parquet files and "stitch" them using metadata (enabling time travel queries, schema evolution, etc.)

My few cents:

- Compute and storage separation simplifies managing a system making compute "ephemeral"

- Compute resources can be scaled separately without worrying about scaling storage

- Object storage provides much higher durability (99.999999999% on S3) compared to disks

- Open table formats on S3 become a universal interface in the data space allowing to bring many other data tools if necessary

- Costs at scale can actually be lower since there is no data transfer cost within the same region. For example, you can check out WarpStream (Kafka on object storage) case studies that claim saving 5-10x

I'd say that querying data from S3 is not ideal when low-latency queries are required. Generally, there could be a few roundtrip requests to fetch metadata (JSON, Avro) and data (Parquet) files, which may lead to around 1s or so latency. However, we have caching on our roadmap (it could be just a simple TTL for the fetched data or some more sophisticated caching depending on the synced & queried data)

Good point. For more complex scenarios, people would still be able to implement, for example, a Medallion Architecture to progressively improve data quality and structure. Because it is Postgres- and Iceberg-compatible (db and data), it's possible to bring more other advanced data tools when it's needed to perform data transformation and movement. Currently, we see it as a Postgres read replica for analytics. But it's easy to imagine that in the future it could be used as a standalone OSS database on top of a data lakehouse with an open format in S3.

Exactly! You can run it on any server connecting to any Postgres, without installing custom extensions (AWS Aurora supports only a limited number of extensions https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQ...).

The Iceberg tables are created separately from the DuckDB query engine. So you should be able to read these Iceberg tables by using any other Iceberg-compatible tools and services like AWS Athena.

Our philosophy in general is to go to a more open license over time (vs the other direction). So we might consider other more permissive OSI-approved licenses.

Would you be able to share why AGPL license is a no-go for you? I'm genuinely curious about your use case. In simple words, it'd require a company to open source their BemiDB code only if they made modifications and were distributing it to other users (allowing modifications and using it internally without any restrictions)

Thank you, please give it a try!

Great questions:

1. We currently don't support multi-dimensional arrays, but we plan to add support for such complex data structures.

2. Would you be able to share what type of user-defined functions are these, do they do modify the data or read it?

ClickHouse is definitely a popular choice nowadays. I'm curious whether you self-host ClickHouse or use their Cloud? We wanted to make BemiDB as simple to run as possible with a single binary and object storage (vs large machines, big disks, clustering, running Temporal for CDC, etc.)

Fair point. We think that BemiDB currently can be useful when used with small and medium Postgres databases. Running complex analytics queries on Postgres can work, but it usually requires tuning it and adding indexes tailored to these queries, which may negatively impact the write performance on the OLTP side or may not be possible if these are ad-hoc queries.

(multi-TB databases under load) is where logical replication won't be able to sync your tables in time

I think the ceiling for logical replication (and optimization techniques around it) is quite high. But I wonder what people do when it doesn't work and scale?

We love ParadeDB and their team. Their primary focus is search (Elasticsearch on Postgres), but they also have the pg_analytics Postgres extension (foreign data wrappers and embedded DuckDB).

The biggest difference is in a Postgres extension vs a separate OLAP process. We want to allow anyone with just Postgres to be able to perform analytics queries without affecting resources in the transactional database, building and installing extensions (might not be possible with some hosting providers), dealing with dependencies and their versions when upgrading Postgres, manually syncing data from Postgres to S3, etc.

Thanks!

We love the pg_moooncake extension (and pg_duckdb used under the hood). Although our approaches are slightly different. Long-term, we want to allow anyone to use BemiDB by using native Postgres logical replication without installing any extensions (many Postgres hosting providers impose their restrictions, upgrading versions might be challenging, OLAP queries may affect OLTP performance if within the same database, etc.)