Blog
Engineering
Tutorial: How to build a low-latency Flask app that runs across multiple regions
If your company has a global customer base, you’ll likely be building an application for users in different areas across the world. Deploying the application in just a single region can make high latencies a serious problem for users located far from the application’s deployment region. Latency can dramatically affect user experience, and it can also lead to more serious problems with data integrity, like transaction contention. As a result, limiting latency is among the top priorities for global application developers. In this blog, we walk you through a low-latency multi-region application that we built and deployed for MovR, a fictional vehicle-sharing company with a growing user base. The MovR application is a Flask web application, connected to a CockroachDB cluster with SQLAlchemy. We deployed the application in multiple regions across the US and Europe, using Google Kubernetes Engine, with some additional Google Cloud Services for load balancing, ingress, and domain hosting. For the database, we used a multi-region CockroachDB Dedicated deployment on GCP. The application source code is available on GitHub, and an end-to-end tutorial for developing and deploying the application is available on our documentation website.
Eric Harmeling
April 2, 2020
Product
Build a Go app with GORM for CockroachDB
Back in 2015 the early Cockroach Labs engineers made a decision to write this massive, complex application in Go. Since then we have, on many occassions, discussed our use of Go in blogs and on stage.
Dan Kelly
March 18, 2020
Product
What are hash sharded indexes and why do they matter?
I ended an amazing internship this past fall on the KV (Key-Value) team at Cockroach Labs (responsible for the transaction, distribution and replication layers of CockroachDB). This blog post delves into my work on adding native support for creating hash sharded indexes in CockroachDB, as a way to significantly improve performance on sequential workloads. CockroachDB uses range partitioning by default, as opposed to hash partitioning. As explained in our CTO Peter Mattis’s blog post, a key-value store with range partitioning resembles a distributed balanced tree whereas one with hash partitioning is closer to a distributed hash map. In particular, range partitioning outperforms hash partitioning for the most common SQL workloads like range scans. However, load under range partitioning can become imbalanced for access patterns that focus on a specific range of data, since all traffic is served by a small subset of all the ranges. Sequential insert traffic is a common example of such an access pattern and is much better suited to hash partitioning.
Aayush Shah
March 13, 2020
Performance
AWS, Azure, and GCP respond to the 2020 Cloud Report
In December 2019, we published the 2020 Cloud Report and an accompanying blog post, which summarized original research we conducted benchmarking the performance of Amazon Web Services (AWS), Microsoft Azure (Azure), and the Google Cloud Platform (GCP).
Paul Bardea
March 12, 2020
Company
In the wake of COVID-19: Virtual badge scans for Women Who Code
This past year, the Cockroach Labs marketing team introduced a novel way of collecting leads at large events. Instead of giving away swag (socks, tshirts, pens, etc.) to every person we met, we donated money to a non-profit. Our “contacts for charity” program was wildly successful, and at AWS Reinvent and KubeCon North America last year, we more than tripled our lead capture goals and donated over $14,500 to Women Who Code, the largest and most active community for technical women in the world.
Jim Walker
March 12, 2020
Tutorials
Tutorial: Build an app with Spring, Java, Hibernate, Gradle, and CockroachDB
Application development frameworks like SpringBoot have done a good job a giving developers a quick start to developing applications with Java. Layering object-relational mapping to SQL to remove proprietary syntax has further simplified the development of database applications. CockroachDB allows developers to take advantage in the evolution of globally distributed data with a simple SQL interface. But each database can bring it’s own specific syntax and cause developers to hesitate when getting started with a new database.
Glenn Fawcett
March 4, 2020
Product
Build a Java app with CockroachDB and jOOQ
As of jOOQ's 3.13.0 release, jOOQ fully supports CockroachDB. The CockroachDB SQL dialect is now fully supported for future jOOQ and CockroachDB versions.
Charlotte Dillon
February 19, 2020
Improving data imports in CockroachDB with `nodelocal`
This past fall, I had the opportunity to intern on the relatively new Bulk I/O team at Cockroach Labs. Our team’s focus is to improve bulk data operations on CockroachDB. My work involved creating a better experience when importing or backing up data without using an external storage service like Amazon’s S3 or Azure’s Blob Service. CockroachDB supports interacting with files in a node’s local storage system, through a feature called nodelocal. However, this has caused confusion and misuse due to its implementation, and the project I took on involved refining the user experience around nodelocal.
Georgia Hong
February 13, 2020
Product
How to use CockroachDB with your Django application on Ubuntu
Django is a high-level flexible framework for building Python applications quickly. Applications run on Django store data, by default, into a SQLite database file, but lots of Django users find themselves needing to switch to a more performant database in production, one with better availability or scalability.
Artem Ervits
February 10, 2020