DeBeAndo retweeted
changingTheProdDB redd.it/1h758zs
DeBeAndo retweeted
Cool article from @AxisIPVideo Engineering on replacing Elasticsearch with @ClickHouseDB for metrics analytics from IoT devices, and using materialized views to manage evolving schema changes. engineeringat.axis.com/schem…
DeBeAndo retweeted
Distributed, highly available, and horizontally scalable filesystems like MooseFS exist.
So dumb question: why don't people deploy postgres on distributed filesystems and let the filesystem layer handle horizontal scaling?
en.m.wikipedia.org/wiki/Moos…
DeBeAndo retweeted
And they didn't even test 8.2 yet ! 😅 #MySQL #MySQLCommunity
DeBeAndo retweeted
Estamos en época de entrevistas, asi que reflotamos el hilo con los 5 errores más comunes que echan cualquier entrevista a perder
El año pasado hice 53 entrevistas solo para perfiles junior y no os podeis imaginar lo que cambia la cosa al otro lado de la mesa
Vamos allá
DeBeAndo retweeted
Building a #golang container image for production
One of the many reasons I love GO is how easy it is to build and containerise. However, it's also important to ensure your production application has the smallest attack surface possible, is portable, and small in size.
Let's talk through how you might do that.
FROM golang:1.21.0-bullseye as builder
This uses the official Go image version 1.21 as the base image and names the stage "builder." Here we are building a multistage docker image. Because GO compiles to a binary, we don't actually need Go to run it and can throw the build dependencies away (docs.docker.com/build/buildi…)
COPY . /workdir
This copies the current directory into the /workdir directory inside the container.
WORKDIR /workdir
This sets the working directory inside the container to /workdir.
ENV CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-all"
This sets an environment variable for the C compiler, with specific flags for hardening the code. You can read more about these flags here: developers.redhat.com/articl…
ENV GOFLAGS="-buildmode=pie"
This sets an environment variable for the Go build process, instructing it to build a Position Independent Executable (PIE), adding an extra layer of security to the compiled binary.
FROM gcr.io/distroless/base-debia…
This setups the second image in our multi-stage build. This time, we are using a distroless base image. You can read about the advantage of distroless here: github.com/GoogleContainerTo…
COPY --from=builder /workdir/app /bin/app
This copies the compiled binary from the builder stage to the /bin directory in the final image. You'll need to update "app" to be the path to your main.go.
USER 65534
This sets the user ID for running subsequent commands and for when the container is run. 65534 is often associated with a user that has minimal privileges, enhancing security.
ENTRYPOINT ["/bin/app"]
This specifies the command to run when the container starts. Again, you'll need to change it depending on how you named your app.
That's it! Who knew you could do so much with so few lines!
How do you build your images? Anything I should be doing differently?
DeBeAndo retweeted
Discord engineering has migrated from Cassandra to ScyllaDB.
I made a video doing a deep dive on their well written blog on how they improved the performance storing trillions of messages.
Topics covered and video links
- The Cassandra Troubles
- SnowFlake vs UUID
- B+Tree and SSDs
- LSM Trees and SSDs
- Hot partitions
- Cassandra GC Pauses
- Changing the Architecture
- The Data Services
- The Migration
- ZNS
How Discord Stores Trillions of Messages | Deep Dive
youtu.be/xynXjChKkJc
Podcast
anchor.fm/hnasr/episodes/How…
DeBeAndo retweeted
3. go-tinybird
A Tinybird SDK for Go, courtesy of @debeando and Adrián Herrera of @thehotelsnet, with contributions by Gabriel Browarnik of @Draftea_Mexico.
Initial commit: Aug 25, 2022 👨🏻
github.com/the-hotels-networ…
DeBeAndo retweeted
Oh wow. Lotus 1-2-3 for #Linux github.com/taviso/123elf Back in the old days, I was sent to Lotus 1-2-3 training. At some point, we did IT inventory tracking in IT too. That was a fun project.
DeBeAndo retweeted
En el siguiente artículo de @Percona podemos encontrar una serie de pruebas sobre diferentes #proxies para #MySQL: #ProxySQL, #MySQLRouter y #HAProxy.
Te dejamos aquí abajo el artículo para que saques tus propias conclusiones ;)
mtr.cool/xcxqippmfb
DeBeAndo retweeted
Here is what 𝗔𝘁-𝗟𝗲𝗮𝘀𝘁/𝗠𝗼𝘀𝘁 𝗢𝗻𝗰𝗲 𝗣𝗿𝗼𝗰𝗲𝘀𝘀𝗶𝗻𝗴 in 𝗞𝗮𝗳𝗸𝗮 is.
Kafka is an extremely important Distributed Messaging System to understand as other similar systems are borrowing fundamental concepts from it, last time we covered Reading Data.
Today we talk about At-Least Once and At-Most Once Processing. Why do you need to understand the concept and how it might impact your Stream Processing Application?
𝗦𝗼𝗺𝗲 𝗿𝗲𝗳𝗿𝗲𝘀𝗵𝗲𝗿𝘀:
➡️ Data is stored in Topics that can be compared to tables in Databases.
➡️ Messages in the Topics are called Records.
➡️ Topics are composed of Partitions.
➡️ Each Record has an offset assigned to it which denotes its place in the Partition.
➡️ Clients reading Data from Kafka are called Consumers.
➡️ Consumer Group is a logical collection of clients that read data from a Kafka Topic and share the state.
𝗥𝗲𝗯𝗮𝗹𝗮𝗻𝗰𝗲:
➡️ Consumers commit their state into a Kafka Topic named __consumer_offsets.
➡️ State is denoted by an offset that a Consumer is currently reading at in a given Partition.
➡️ There are different strategies when a commit happens. E.g. every n seconds, on-demand.
➡️ If a Consumer fails or the Consumer Group is restarted, a rebalance will be initiated.
➡️ New Consumers will launch and take the place of the old ones.
➡️ Consumers start Reading Data from the last committed state per Partition.
There are different scenarios that can unfold when a Consumer restarts. Let’s take an easy example where you read data from Kafka, buffer it in memory and write a batch into an Object Storage.
𝗔𝘁-𝗟𝗲𝗮𝘀𝘁 𝗢𝗻𝗰𝗲 𝗣𝗿𝗼𝗰𝗲𝘀𝘀𝗶𝗻𝗴:
➡️ You set an offset commit strategy to on-demand.
1️⃣ Read the entire batch.
2️⃣ Serialize and write it into object storage.
3️⃣ Wait for a successful write.
4️⃣ Commit offsets.
❗️If Consumer fails before committing offsets after a successful Write new consumer will start from the last committed offset and writes duplicate Data to Object Storage.
✅ This is usually ok for Batch Systems as deduplication is performed during ETL.
𝗔𝘁-𝗠𝗼𝘀𝘁 𝗢𝗻𝗰𝗲 𝗣𝗿𝗼𝗰𝗲𝘀𝘀𝗶𝗻𝗴:
➡️ You commit offsets in small time intervals without waiting for a successful write to Object Storage.
❗️If Consumer fails before a successful Write into an Object Storage new consumer will start from the last committed offset and it will result in some Data not being processed.
✅ This is usually ok for Logging Systems as losing small amounts of data does not affect the System in Critical ways.
Have you run into any problems with described behaviours? Let me know in the comment section 👇
--------
Follow me to upskill in #MLOps, #MachineLearning, #DataEngineering, #DataScience and overall #Data space.
Also hit 🔔to stay notified about new content.
𝗗𝗼𝗻’𝘁 𝗳𝗼𝗿𝗴𝗲𝘁 𝘁𝗼 𝗹𝗶𝗸𝗲 💙, 𝘀𝗵𝗮𝗿𝗲 𝗮𝗻𝗱 𝗰𝗼𝗺𝗺𝗲𝗻𝘁!
Join a growing community of Data Professionals by subscribing to my 𝗡𝗲𝘄𝘀𝗹𝗲𝘁𝘁𝗲𝗿.
DeBeAndo retweeted
¿Por qué debemos usar un gestor de mensajes cómo Kafka o SQS entre otros?
Estos servicios los llamaremos brokers de mensajes y juegan un papel crucial a la hora de construir sistemas distribuidos o microservicios para mejorar el rendimiento, escalabilidad y mantenibilidad:
🔹Desacoplamiento: Promueven el desarrollo, despliegue y escalado independientes al crear una separación entre los componentes de software.
🔹Comunicación asíncrona: Permite que los componentes se comuniquen sin esperar respuestas, lo que hace que el sistema sea más eficiente y permite un equilibrio de carga eficaz.
🔹Fiabilidad: Garantizan que los mensajes no se pierdan durante los fallos de uno de los componentes al proporcionar almacenamiento en búfer y persistencia.
🔹Escalabilidad: Gestionan un gran volumen de mensajes, permitiendo que tu sistema escale horizontalmente añadiendo más brokers de mensajes según sea necesario.
En resumen, un broker de mensajes puede mejorar la eficiencia, escalabilidad y fiabilidad de tu arquitectura. Considerar el uso de estos servicios puede beneficiar enormemente el éxito a largo plazo de su aplicación. Piense siempre en el panorama general y en cómo sus decisiones de diseño afectarán al proyecto en su conjunto.
DeBeAndo retweeted
¿En la empresa donde trabajas usan convención de nombres?
86%Si
14%No
7 votes • Final results DeBeAndo retweeted
emitter: High performance, distributed and low latency publish-subscribe platform.
⭐️ 3496
#golang
github.com/emitter-io/emitte…
DeBeAndo retweeted
8 key data structures that power modern databases. Which one is your favorite, and why?
DeBeAndo retweeted
Postgres locks are interesting and can be confusing to understand. There are five lock categories in postgres and over 12 individual locks. I explore all types and categories of locks in this video. Here are they in order.
** Table-Level Locks
- ACCESS EXCLUSIVE
- ACCESS SHARE
- ROW SHARE
- ROW EXCLUSIVE
- SHARE UPDATE EXCLUSIVE
- SHARE
- SHARE ROW EXCLUSIVE
- EXCLUSIVE
** Row-Level Locks
- FOR UPDATE
- FOR NO KEY UPDATE
- FOR SHARE
- FOR KEY SHARE
** Page-Level Locks
** Deadlocks
** Advisory Locks





























