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.