mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
989892dcaa
commit
94de0d13c8
|
@ -19,6 +19,22 @@
|
|||
\item Требуется включение/исключение авторов.
|
||||
\end{enumerate}
|
||||
|
||||
\section{Стейт}
|
||||
|
||||
Исходя из требований, введём стейт как рефчан блоков транзакций, где каждая транзакция содержит
|
||||
ссылку на блок, а каждый блок является \term{sstable}{sstable}, т.е индексированным, однократно
|
||||
записываемым отсортированным множеством пар \texttt{(ключ, значение)}.
|
||||
|
||||
Такой формат гарантирует нам, что одинаковая кодовая база (в плане настроек LSM и соглашений) будет
|
||||
порождать идентичные блоки.
|
||||
|
||||
В тоже время --- каждая отдельная <<транзакция>>, то есть <<факт>> -- не будет порождать отдельного
|
||||
адресуемого объекта, таким образом, будут снижены все связанные с этим накладные расходы.
|
||||
|
||||
При этом мы можем относительно быстро находить блок и проверять его наличие в прочих сегментах.
|
||||
|
||||
|
||||
|
||||
|
||||
% \section{Структуры данных и протоколы}
|
||||
|
||||
|
|
57
flake.lock
57
flake.lock
|
@ -133,6 +133,21 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_7": {
|
||||
"locked": {
|
||||
"lastModified": 1644229661,
|
||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"haskell-flake-utils": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils"
|
||||
|
@ -229,6 +244,24 @@
|
|||
"inputs": {
|
||||
"flake-utils": "flake-utils_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1698938553,
|
||||
"narHash": "sha256-oXpTKXioqFbl2mhhvpJIAvgNd+wYyv4ekI+YnJHEJ6s=",
|
||||
"owner": "ivanovs-4",
|
||||
"repo": "haskell-flake-utils",
|
||||
"rev": "19b273b5dc401a0a565e7f75cf50a593871b80c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ivanovs-4",
|
||||
"repo": "haskell-flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"haskell-flake-utils_7": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_7"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1672412555,
|
||||
"narHash": "sha256-Kaa8F7nQFR3KuS6Y9WRUxeJeZlp6CCubyrRfmiEsW4k=",
|
||||
|
@ -264,6 +297,27 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"lsm": {
|
||||
"inputs": {
|
||||
"haskell-flake-utils": "haskell-flake-utils_6",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1711033804,
|
||||
"narHash": "sha256-z9cb5yuWfuZmGukxsZebXhc6KUZoPVT60oXxQ6j6ML8=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "0e8286a43da5b9e54c4f3ecdb994173fe77351db",
|
||||
"revCount": 26,
|
||||
"type": "git",
|
||||
"url": "https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1707451808,
|
||||
|
@ -286,6 +340,7 @@
|
|||
"fixme": "fixme",
|
||||
"haskell-flake-utils": "haskell-flake-utils_4",
|
||||
"hspup": "hspup",
|
||||
"lsm": "lsm",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"saltine": "saltine",
|
||||
"suckless-conf": "suckless-conf_2"
|
||||
|
@ -332,7 +387,7 @@
|
|||
},
|
||||
"suckless-conf_2": {
|
||||
"inputs": {
|
||||
"haskell-flake-utils": "haskell-flake-utils_6",
|
||||
"haskell-flake-utils": "haskell-flake-utils_7",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
|
|
|
@ -18,6 +18,9 @@ inputs = {
|
|||
db-pipe.url = "git+https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft";
|
||||
db-pipe.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
lsm.url = "git+https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls";
|
||||
lsm.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
saltine = {
|
||||
url = "github:tel/saltine/3d3a54cf46f78b71b4b55653482fb6f4cee6b77d";
|
||||
flake = false;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
module Main where
|
||||
|
||||
import HBS2.Git.Oracle.Prelude
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
print "hbs2-git-oracle"
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
module HBS2.Git.Oracle.App where
|
||||
|
||||
import HBS2.Git.Oracle.Prelude
|
||||
|
||||
import Control.Monad.Reader
|
||||
|
||||
data OracleEnv =
|
||||
OracleEnv
|
||||
{
|
||||
}
|
||||
deriving stock (Generic)
|
||||
|
||||
newtype Oracle m a =
|
||||
Oracle { fromOracle :: ReaderT OracleEnv m a }
|
||||
deriving newtype ( Applicative
|
||||
, Functor
|
||||
, Monad
|
||||
, MonadTrans
|
||||
, MonadReader OracleEnv
|
||||
, MonadIO
|
||||
, MonadUnliftIO
|
||||
)
|
||||
|
||||
newOracleEnv :: MonadIO m => m OracleEnv
|
||||
newOracleEnv = pure OracleEnv
|
||||
|
||||
withOracleEnv :: MonadIO m => OracleEnv -> Oracle m a -> m a
|
||||
withOracleEnv env m = runReaderT (fromOracle m) env
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
module HBS2.Git.Oracle.Prelude
|
||||
( module HBS2.Prelude.Plated
|
||||
, module Control.Monad.Reader.Class
|
||||
, module UnliftIO
|
||||
) where
|
||||
|
||||
import HBS2.Prelude.Plated
|
||||
|
||||
import Control.Monad.Reader.Class
|
||||
import UnliftIO
|
||||
|
||||
|
|
@ -168,13 +168,28 @@ executable git-remote-hbs2
|
|||
default-language: GHC2021
|
||||
|
||||
|
||||
library hbs2-git-oracle-oracle-lib
|
||||
import: shared-properties
|
||||
|
||||
exposed-modules:
|
||||
HBS2.Git.Oracle.Prelude
|
||||
HBS2.Git.Oracle.App
|
||||
|
||||
build-depends: base
|
||||
, base16-bytestring
|
||||
, binary
|
||||
, unix
|
||||
|
||||
hs-source-dirs: hbs2-git-oracle/lib
|
||||
|
||||
|
||||
executable hbs2-git-oracle
|
||||
import: shared-properties
|
||||
main-is: Main.hs
|
||||
-- other-modules:
|
||||
-- other-extensions:
|
||||
build-depends:
|
||||
base, hbs2-git
|
||||
base, hbs2-git, hbs2-git-oracle-oracle-lib
|
||||
, binary
|
||||
, vector
|
||||
, optparse-applicative
|
||||
|
|
Loading…
Reference in New Issue