<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Malu Decks</title>
    <description>The latest articles on DEV Community by Malu Decks (@maludecks).</description>
    <link>https://dev.to/maludecks</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F133971%2Ff407ee1f-44cf-439d-8692-f0f13b49b90c.jpg</url>
      <title>DEV Community: Malu Decks</title>
      <link>https://dev.to/maludecks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maludecks"/>
    <language>en</language>
    <item>
      <title>Bringing Voicemails Back to Life with Amplify Gen 2</title>
      <dc:creator>Malu Decks</dc:creator>
      <pubDate>Sat, 25 May 2024 19:11:14 +0000</pubDate>
      <link>https://dev.to/maludecks/bringing-voicemails-back-to-life-with-amplify-gen-2-27en</link>
      <guid>https://dev.to/maludecks/bringing-voicemails-back-to-life-with-amplify-gen-2-27en</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/awschallenge"&gt;AWS Amplify Fullstack TypeScript Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;So the other day -- which might have been any point in time between a week and three years ago because you know, pandemic time warp -- I was on TikTok laughing out loud because of this video: &lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xbmHo5HDB9g"&gt;
&lt;/iframe&gt;
&lt;br&gt;
...mimicking how extra we used to be recording voicemail greeting messages back in the day. &lt;/p&gt;

&lt;p&gt;I remember thinking, "there should be a revival app or something for this!" and when I saw the Amplify Gen 2 AWS Challenge, I thought this could be the perfect opportunity to build one. But, not only that, it gave me the excuse I was missing to start experimenting with Amplify.&lt;/p&gt;

&lt;p&gt;For the past week, I’ve been learning a lot but most importantly, having &lt;strong&gt;a lot&lt;/strong&gt; of fun trying things out. What I ended up building is a silly mix of voicemails + scrapbook (for the fellow Brazilians/Indians around here, think Orkut in the early days). I gave it some thought, and the technical requirements I settled on were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user can record a greeting message to show on their profile.&lt;/li&gt;
&lt;li&gt;A user profile shows the user’s greeting message and their *public inbox messages.&lt;/li&gt;
&lt;li&gt;Other users can record and send voicemails to a user profile (and yes, once sent, there is no way back).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;On the finished product, you can listen to a user's greeting message on their profile:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcmpxbrs5isu1ywg8yuz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcmpxbrs5isu1ywg8yuz.gif" alt="Listen to user's greeting message" width="600" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As well as a record and send a voicemail:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F842pdvu74i4vyhp7je59.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F842pdvu74i4vyhp7je59.gif" alt="Record a voicemail" width="600" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And lastly, on your own inbox, see the new ones separated from already opened messages, record a greeting message and manage your account:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjid1dia5hma6woplwum.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjid1dia5hma6woplwum.gif" alt="Listen to new message and open opened messages tab" width="600" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can give it a try yourself &lt;a href="https://main.d5wn5ra3pd2wx.amplifyapp.com/maludecks"&gt;here&lt;/a&gt; by signing up and leaving &lt;em&gt;me&lt;/em&gt; a voicemail. And finally the code can be found &lt;a href="https://github.com/maludecks/voicemailer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;IMPORTANT NOTES IN CASE YOU'RE ACTUALLY TRYING IT OUT:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once you sent a message, there is no way back, only the receiver can delete it&lt;/li&gt;
&lt;li&gt;Messages sent are &lt;strong&gt;public&lt;/strong&gt;, anyone can listen to them :) &lt;/li&gt;
&lt;li&gt;Works better on desktop &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;A moment of oversharing: you probably don’t know (because you don't know me) but I was a backend engineer at Spotify for a bit over a year and got laid off back in December. Since then, I have been learning things for the sake of learning, in an attempt to make programming spark some joy for me again. I came to the conclusion that I want to become a fullstack web dev - &lt;em&gt;I think&lt;/em&gt;. So off I went to learn modern frontend (aka React and friends). I’m very much in the beginning of this new journey, which you might notice when going through my code 👀 but yes, I’m excited to write code again! &lt;/p&gt;

&lt;p&gt;Back to the app in this submission, the result is a Next.js 14 app to handle routing + tailwindcss and somewhat of a &lt;em&gt;neubrutalism&lt;/em&gt; design. &lt;/p&gt;

&lt;p&gt;Some learnings along the way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s kind of hard to find answers on the web with the differentiation of Amplify Gen 1 and Gen 2 sometimes. The docs are very thorough but once you want to try things that are not so explicit in there, you’ll find yourself doing Gen 1 things. &lt;/li&gt;
&lt;li&gt;…But as I said, the docs are very thorough, and a lot of the things I lost myself in google results, I found the actual answer back in the docs (I know, I know, classic).&lt;/li&gt;
&lt;li&gt;Because I couldn’t find a way to use Amplify SDK to list/query Cognito users directly, I introduced the username mapping table to make things easier for me, there are other ways to solve this, but that’s the route I took.&lt;/li&gt;
&lt;li&gt;At first, I wanted to add a lot more features, like the ability for the user to choose which messages go public and which stay private, or record several greetings and choose which one shows in the profile…but I was running out of time for the submission and it kind of felt like overkill.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Connected Components and/or Feature Full&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I was able to create a &lt;strong&gt;feature-full&lt;/strong&gt; app by integrating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data&lt;/strong&gt; -&amp;gt; DynamoDB to store both messages, greetings and a username mapping and AppSync GraphQL API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; -&amp;gt; S3 for the audio recordings of messages and greetings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; -&amp;gt; Cognito with login through email and the use of auth &lt;strong&gt;Connected UI Components&lt;/strong&gt; for the login/signup and account management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functions&lt;/strong&gt; -&amp;gt; Lambda functions to validate/handle usernames.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By using Amplify Gen 2 setting up and deploying all of these components becomes a very simple task. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sz8vjdhnvbshp6a68k2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sz8vjdhnvbshp6a68k2.png" alt="Diagram representation of the app overall architecture" width="800" height="775"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  That's a wrap
&lt;/h2&gt;

&lt;p&gt;I’m extremely proud of what I built, I got to try out a whole bunch of new things and I now have an even longer list of React/Next.js things I need to dig deeper into. But overall, I’m mostly proud of myself for sticking with the plan throughout the whole week and being able to finish a for-fun project once again.&lt;/p&gt;

&lt;p&gt;Amplify Gen 2 makes deploying apps on AWS so freaking simple that it feels like cheating. Once you comprehend what the possibilities are, it's really an incredible tool. I hope you get to send out some voicemails, let me know in the comments if (or should I say when) you find any bugs 🐛&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>awschallenge</category>
      <category>amplify</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>Modern databases &amp; their differences</title>
      <dc:creator>Malu Decks</dc:creator>
      <pubDate>Mon, 11 Nov 2019 08:04:00 +0000</pubDate>
      <link>https://dev.to/maludecks/modern-databases-their-differences-294a</link>
      <guid>https://dev.to/maludecks/modern-databases-their-differences-294a</guid>
      <description>&lt;h1&gt;
  
  
  Modern databases &amp;amp; their differences
&lt;/h1&gt;

&lt;p&gt;At WebSummit 2019 I attended a really nice workshop from AWS called "Choosing the right database for your application", by &lt;a href="https://twitter.com/steven_bryen" rel="noopener noreferrer"&gt;Steven Byer&lt;/a&gt;. I'll try to explain the things I found more interesting and add some more information that I personally wanted to understand better. &lt;/p&gt;

&lt;h2&gt;
  
  
  A brief intro
&lt;/h2&gt;

&lt;p&gt;The volume of data we are handling today is higher than ever before, which makes maintaining databases more challenging than ever before. The challenge begins when choosing what type of database you are going to use in your application. &lt;/p&gt;

&lt;p&gt;In the past, the answer would be really clear and simple: a relational database will solve it. Nowadays, even though a relational database will still possibly solve your problem, we have other options that might suit our use case better and make our lives easier. We just need to know the options and, of course, really understand the needs of our use case. &lt;/p&gt;

&lt;h2&gt;
  
  
  The options
&lt;/h2&gt;

&lt;p&gt;So, what is there in the modern world of databases? The options I will cover here are the same ones Steven Byer mentioned in his talk: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relational &lt;/li&gt;
&lt;li&gt;Key-value&lt;/li&gt;
&lt;li&gt;Document&lt;/li&gt;
&lt;li&gt;Graph&lt;/li&gt;
&lt;li&gt;Time-series&lt;/li&gt;
&lt;li&gt;Ledger&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s start then.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relational
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: Mysql and Oracle&lt;/p&gt;

&lt;p&gt;Relational databases are structured as &lt;strong&gt;tables&lt;/strong&gt; that contain data, and these tables relate to each other using keys that can identify their connection, for example an ID. Relational databases are easy to visualize, maybe because we are so used to them that it is just automatically understandable when you see an image like this: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fvkamow24l5p1fp3kqonn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fvkamow24l5p1fp3kqonn.png" alt="Database tables for albums, artists and genres"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the example above we have database for musical albums. An album has a name, a release date, an artist and a genre, but the artist’s and genre’s detailed information belong in their own tables. &lt;/p&gt;

&lt;p&gt;First because &lt;em&gt;their data&lt;/em&gt; actually belongs to &lt;em&gt;their own entity&lt;/em&gt;, and not to the album itself. &lt;/p&gt;

&lt;p&gt;Second, we want to &lt;a href="https://en.wikipedia.org/wiki/Database_normalization" rel="noopener noreferrer"&gt;normalize our database&lt;/a&gt;, so we can connect the same artist and genre to multiple albums without repeating data. &lt;/p&gt;

&lt;p&gt;We create this relation by giving an identifier to every artist and genre, and in our album, we store the identifiers, respectively. Later on we can connect all the pieces we want by querying it with the help of a SQL statement.&lt;/p&gt;

&lt;p&gt;Relational databases are &lt;a href="https://en.wikipedia.org/wiki/Consistency_(database_systems)" rel="noopener noreferrer"&gt;consistent&lt;/a&gt;, the schema you pre-define &lt;strong&gt;must&lt;/strong&gt; be respected in order to store your data in it, and the data you get out of it is guaranteed to be in the norm of your schema; Also, &lt;a href="https://database.guide/what-is-acid-in-databases/" rel="noopener noreferrer"&gt;all major relational databases adhere to the ACID principles&lt;/a&gt; and &lt;a href="https://database.guide/what-is-referential-integrity/" rel="noopener noreferrer"&gt;guarantee referential integrity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some use cases&lt;/strong&gt;: ERPs and CRMs are good real life examples where using a relational database is the perfect fit. Applications where you have a highly structured data schema that needs to be respected; if you need to perform actions when the data is manipulated (through triggers); when consistency is at the top high priority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key-value
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: DynamoDB and Redis&lt;/p&gt;

&lt;p&gt;As opposed to relational databases, where we need to pre-define the data structure, key-value databases (also called key-value stores) treat data as a single collection. It’s a simple key-value method, where a key that can be anything (but must be unique), links to a value, that can also be anything. Each record may contain different fields. There is no schema to abide by, because the schema is defined by the item being inserted. A unique key linking to a particular set of data. That’s all.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd1.awsstatic.com%2Fproduct-marketing%2FDynamoDB%2FPartitionKey.8dd0530a7f6d66d101f31de30db515564f4cf28a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd1.awsstatic.com%2Fproduct-marketing%2FDynamoDB%2FPartitionKey.8dd0530a7f6d66d101f31de30db515564f4cf28a.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/nosql/key-value/" rel="noopener noreferrer"&gt;The example above is provided by AWS in their section about key-value stores&lt;/a&gt;. As you can see, each item contains a different type of data: books, albums, movies, all in the same store, and each type of data, doesn’t necessarily contain the same structure.&lt;/p&gt;

&lt;p&gt;The simplicity of a key-value store is one of the advantages of using it, but there’s more: key-value databases are really easy to partition, therefore it’s easier to &lt;a href="https://hackernoon.com/database-scaling-horizontal-and-vertical-scaling-85edd2fd9944" rel="noopener noreferrer"&gt;horizontally scale them&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some use cases&lt;/strong&gt;: Cache, shopping carts, product catalogs, customer preferences applications. Applications where you have &lt;em&gt;flexible&lt;/em&gt; data with no complex relationships and need to be able to easily scale horizontally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Document
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: MongoDB, Couchbase, DynamoDB again and Redis (Enterprise with Redis Modules)&lt;/p&gt;

&lt;p&gt;Document databases are an extension from key-value stores. In these databases you still give the data a unique key, but the values are stored in a &lt;em&gt;structured format&lt;/em&gt; that the database can &lt;em&gt;understand&lt;/em&gt;, usually a JSON-like document (hence the name). The values are structured in a defined format, but storing it is the same as in a key-value database: no schema, the data can be anything, as long as it respects the format.&lt;/p&gt;

&lt;p&gt;In a key-value store, the database doesn’t know anything about the data, just stores it in whatever way you insert it. You can even store multiple types of data, and the database will treat everything the same way. In a document database, the database can &lt;em&gt;read&lt;/em&gt; and &lt;em&gt;understand&lt;/em&gt; what is stored, therefore, it gives you some extra powers when querying the values. Aside from the key, you can also define other indices and write more complex queries than you would in a simple key-value store. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some use cases&lt;/strong&gt;: CMS applications, catalogs and since document databases are an extension from key-value databases, the examples listed in the previous section also apply here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Graph
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: Neptune, Neo4j and Dgraph&lt;/p&gt;

&lt;p&gt;A graph database organizes data in nodes and edges. The nodes represent the entities and the edges represent the relationship between nodes. &lt;/p&gt;

&lt;p&gt;In a relational database, the relationship between tables are only that, a link between records. But in a graph database, the relationship (edges) tells us more than just the link. The edges have metadata that explains better what type of relationship a record (node) has with the other. &lt;/p&gt;

&lt;p&gt;Graph databases are also schemaless, as key-value and document databases, giving us the same flexibility mentioned before.&lt;/p&gt;

&lt;p&gt;In graph databases it’s much easier (and faster) to find specific connections between entities, since these connections are the key concept in this type of database. See the example: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzhzzt3r0rmn2uga2h1tp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzhzzt3r0rmn2uga2h1tp.png" alt="Example of a graph database for a simple social network, with nodes for users and edges for friendship"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the example above you can see a really simple social network, you see the users, which are the nodes and the edges connecting them. Each edge has a defined type of connection set as metadata, which then can be used to query the nodes. If we want to, for example, find possible friends in common from Angela and Anthony, we could find all Anthony’s friends who are not Angela and who Angela is still not friends with, which would show us Debby. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some use cases&lt;/strong&gt;: recommendation engines, social networking and fraud detection. All this is also possible in a simple relational database, but a graph database is optimised for when the connections are the most important part of the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time-series
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: AWS Timestream and Graphite&lt;/p&gt;

&lt;p&gt;Time-series databases are optimised for storing data collected sequentially over time. A timestamp is the primary axis in this type of databases, and they are designed to store and process huge volumes of data. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some use cases&lt;/strong&gt;: Monitoring applications, live stock information, weather forecast. Whenever time is the main key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ledger
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: AWS Quantum Ledger Database (QLDB)&lt;/p&gt;

&lt;p&gt;QLDB is designed specially for blockchain applications, but there are many use cases in which we need to store historical or audit data. AWS created QLDB with the idea of solving the problems you might encounter when implementing these applications.&lt;/p&gt;

&lt;p&gt;In QLDB a ledger is a database that contains a journal, a current state and the indexed history tables. &lt;/p&gt;

&lt;p&gt;The journal is where each event that happens to an entity is appended as a record in an immutable, cryptographically verifiable block in the journal. On top of the journal containing all the transactions, there is the current state table, which contains what the name already tells us: the latest state of the entity, based on the sequence of changes that happened to it, up to now. And last but not least, the indexed history table, which contains the sequential state changes, stored as a history.&lt;/p&gt;

&lt;p&gt;QLDB is much more than just saving historical data (and much more than I can explain), if you want to know all the details, I recommend watching &lt;a href="https://youtu.be/7G9epn3BfqE" rel="noopener noreferrer"&gt;this talk from Chris de Kadt and Andrew Certain at AWS re:invent 2018&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some use cases&lt;/strong&gt;: Blockchain, event sourcing applications, basically everywhere you need to keep history and/or this history needs to be verifiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Key-value, document, graph, time-series and ledger are types of noSQL databases, meaning that they are non-relational. They don’t store data in a tabular traditional format. NoSQL databases exist since the 60s, but they only got the fancy name a while ago, and they are getting more popular everyday.&lt;/p&gt;

&lt;p&gt;There was a time where going for a traditional relational database was the obvious choice. Today, in the cloud era, even though there is absolutely nothing wrong with going for a relational database, you do have other options that might suit you better, and are not as hard and expensive to implement as it was a couple of years ago. &lt;/p&gt;

&lt;p&gt;All databases have their advantages and disadvantages, and the answer will always depend on your use case and your priorities.&lt;/p&gt;

</description>
      <category>websummit</category>
      <category>database</category>
      <category>nosql</category>
    </item>
  </channel>
</rss>
