Apr 26, 2021
ELI5: Ent - Schema as Code in Go
By Dmitry Vinnik
Originally posted here.
In this post, we take a closer look at an open source project called Ent, an entity framework for Go, in a way that is super simple to understand or as it's commonly known online, ELI5. If you're interested in learning by watching or listening, check out a video about this open source project on our Facebook Open Source YouTube channel.
What do most applications do these days? They interact with data in one way or another. As your app's scale increases, it becomes more challenging to manage databases, schemas, queries, and constraints. These challenges are why a technique called Object-Relational Mapping, or ORM, was created. It vastly simplifies your app's development by limiting how much you work with raw SQL and, therefore, keep your database more secure, your code less repetitive, and your app more robust.
At Facebook, we tend to think about data modeling in graph concepts like with GraphQL, a query language for API. As we were working with Go-lang, we had been looking for a way to get the benefits of ORM while interacting with Graph-based data models. This search led us to create a new open source project, Ent.
Ent is an entity framework built for Go programming language. This framework provides developers with a Graph-based, Object Relational Mapping.
With Ent, data schemas, including types, relations and constraints, are treated as code. Ent lets developers avoid context switching and continue working with Go while using Go.
Ent's static types and explicit API make it very accessible for new developers. In return, this increased efficiency leads to more robust code.
Ent is very much declarative where operations like queries, aggregations and graph traversals are kept simple because there is no need to write raw SQL.
Lastly, Ent enforces a storage agnostic approach where its users are not bound to any particular technology. For example, during the development of Ent, the Facebook Connectivity team was able to migrate from AWS Neptune to MySQL seamlessly.
Where is it used?
Where can I learn more?
Are you interested in learning more about Ent? The project has excellent starter and advanced documentation and a growing following on GitHub. If you are keen on using Go, we invite you to look at GoDoc.
About the ELI5 series
In a series of short videos (~1 min in length), one of our Developer Advocates on the Facebook Open Source team explains a Facebook open source project in a way that is easy to understand and use.
We will write an accompanying blog post (like the one you're reading right now) for each of these videos, which you can find on our YouTube channel.
Interested in working with open source at Facebook? Check out our open source-related job postings on our career page by taking this quick survey.