World’s Simplest Key-Value Database, Implemented in Two PowerShell Functions

I’ve been spending some time learning from the “Designing Data-Intensive Applications” book. I am reading it for the third time, cover-to-cover. That is a fantastic book.

At some point, the author shares an interesting “database” implementation with two bash functions. Here is my implementation (following the very same ideas), using PowerShell.

function Set-DbValue {
    param(
        [Parameter(
           Mandatory = $true
        )]
        [string]$key,
        [Parameter(
           Mandatory = $true
        )]
        [string]$value
    )
    
    Write-Host "Setting '$key' to '$value'"
    Add-Content Database.txt "$key, $value"
}

function Get-DbValue {
    param(
        [Parameter(
           Mandatory = $true
        )]
        [string]$key
    )
    
    Select-String -Path ".\Database.txt" -Pattern "^$key, (?.*)$" `
    | Select-Object -Last 1 `
    | %{ $_.Matches[0].Groups["x"].Value }
}

Of course, this is not enough for any real-world scenario.

Every call to Set-DbValue function appends to the end of the file (not overwriting values). Every time you need to get a value, you need to look for the last occurrence of the key. The Set-DbValue performance is excellent. But, the Get-DbValue performance is terrible (all calls are O(n)).

IMPORTANT: I am far away from being a PowerShell specialist. If you can improve this code, I will be happy learning from you in the comments.

If you are serious about using a good database, I have an excellent recommendation for you.

Compartilhe este insight:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Mais insights para o seu negócio

Veja mais alguns estudos e reflexões que podem gerar alguns insights para o seu negócio:

  Recently, I asked what would be the execution result of the following code: using System.Threading.Tasks; using static System.Console; class...
Situações como a que estamos vivendo nos “empurram” para algumas reflexões. De certa forma, paramos de reagir e começamos a...
In this post, I would like to explain a basic but confusing concept of CUDA programming: Thread Hierarchies. It will...
In this post, I would like to explain a basic but confusing concept of CUDA programming: Thread Hierarchies. It will...
Autorização, em qualquer aplicação não é processo simples. Quando estamos implementando Microsserviços, o desafio pode ser um pouco maior. Neste...
In the previous post, I shared an example of how containers could help us to make the code clearer about...