wb-cache 0.1.0

Your L1 in-app write-behind cache for various kinds of backends.
Documentation
<mxfile host="65bd71144e">
    <diagram id="yfqDDLyRFYrbodU41Cd1" name="Page-1">
        <mxGraphModel dx="1102" dy="1057" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
            <root>
                <mxCell id="0"/>
                <mxCell id="1" parent="0"/>
                <mxCell id="5" value="Data&lt;br&gt;Controller" style="rounded=1;whiteSpace=wrap;html=1;strokeWidth=3;fontFamily=American TypeWriter;fontStyle=1;fontSize=20;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
                    <mxGeometry x="130" y="260" width="160" height="80" as="geometry"/>
                </mxCell>
                <mxCell id="17" value="" style="curved=1;endArrow=openThin;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeWidth=5;fillColor=#60a917;strokeColor=#2D7600;verticalAlign=middle;align=left;endFill=0;" parent="1" source="2" target="5" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="255" y="540" as="sourcePoint"/>
                        <mxPoint x="120" y="149" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="220" y="190"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="18" value="on_add" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=American TypeWriter;fontSize=11;fontColor=default;labelBackgroundColor=default;fillColor=none;gradientColor=none;labelPosition=left;verticalLabelPosition=bottom;spacingRight=10;textOpacity=50;" parent="17" vertex="1" connectable="0">
                    <mxGeometry x="0.1596" y="8" relative="1" as="geometry">
                        <mxPoint x="48" y="-18" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="19" value="" style="group" parent="1" vertex="1" connectable="0">
                    <mxGeometry x="420" y="160" width="280" height="160" as="geometry"/>
                </mxCell>
                <mxCell id="2" value="&lt;div&gt;Cache&lt;br&gt;Controller&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontFamily=American TypeWriter;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=top;fontSize=20;fontStyle=1;strokeWidth=3;" parent="19" vertex="1">
                    <mxGeometry width="280" height="160" as="geometry"/>
                </mxCell>
                <mxCell id="3" value="Updates&lt;br&gt;Pool" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=American TypeWriter;fontStyle=1;dashed=1;" parent="19" vertex="1">
                    <mxGeometry x="10" y="70" width="120" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="4" value="Cache" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=American TypeWriter;fontStyle=1;dashed=1;" parent="19" vertex="1">
                    <mxGeometry x="150" y="70" width="120" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="11" value="" style="curved=1;endArrow=openThin;html=1;strokeWidth=5;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.5;exitY=1;exitDx=0;exitDy=0;endFill=0;exitPerimeter=0;entryX=0.5;entryY=0.063;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="43" target="2" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="500" y="200" as="sourcePoint"/>
                        <mxPoint x="560" y="190" as="targetPoint"/>
                        <Array as="points"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="48" value="&lt;font face=&quot;American TypeWriter&quot;&gt;insert&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=default;textOpacity=50;" vertex="1" connectable="0" parent="11">
                    <mxGeometry x="0.2557" y="-1" relative="1" as="geometry">
                        <mxPoint x="21" y="-14" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="25" value="" style="curved=1;endArrow=openThin;html=1;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;resizable=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;rounded=1;strokeColor=#A50040;strokeWidth=5;align=left;verticalAlign=middle;endFill=0;fillColor=#d80073;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="5" target="3" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="400" y="570" as="sourcePoint"/>
                        <mxPoint x="450" y="520" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="240" y="370"/>
                            <mxPoint x="490" y="340"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="26" value="update state" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=American TypeWriter;fontSize=11;fontColor=default;labelBackgroundColor=default;fillColor=none;gradientColor=none;spacingRight=0;textOpacity=50;" parent="25" vertex="1" connectable="0">
                    <mxGeometry x="-0.1594" y="5" relative="1" as="geometry">
                        <mxPoint x="12" y="-12" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="27" value="" style="curved=1;endArrow=openThin;html=1;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;resizable=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;rounded=1;strokeColor=#A50040;strokeWidth=3;align=left;verticalAlign=middle;endFill=0;fillColor=#d80073;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="5" target="4" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="260" y="370" as="sourcePoint"/>
                        <mxPoint x="340" y="200" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="200" y="390"/>
                            <mxPoint x="630" y="350"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="28" value="final record&lt;br&gt;&lt;font face=&quot;Helvetica&quot;&gt;&lt;i&gt;(if DC considers it reasonable)&lt;/i&gt;&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=American TypeWriter;fontSize=11;fontColor=default;labelBackgroundColor=default;fillColor=none;gradientColor=none;spacingRight=0;textOpacity=50;" parent="27" vertex="1" connectable="0">
                    <mxGeometry x="-0.1594" y="5" relative="1" as="geometry">
                        <mxPoint x="26" y="29" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="40" value="" style="group;fillColor=default;strokeWidth=1;perimeterSpacing=0;glass=0;strokeColor=default;shadow=1;" parent="1" vertex="1" connectable="0">
                    <mxGeometry x="130" y="30" width="220" height="130" as="geometry"/>
                </mxCell>
                <mxCell id="29" value="" style="curved=1;endArrow=openThin;html=1;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;resizable=0;rounded=1;strokeColor=#6c8ebf;strokeWidth=5;align=center;verticalAlign=middle;endFill=0;fillColor=#dae8fc;" parent="40" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="20" y="50" as="sourcePoint"/>
                        <mxPoint x="100" y="50" as="targetPoint"/>
                        <Array as="points"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="30" value="Initial Stage&lt;div&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;(Request)&lt;/span&gt;&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=none;fillColor=none;gradientColor=none;" parent="29" vertex="1" connectable="0">
                    <mxGeometry x="-0.425" relative="1" as="geometry">
                        <mxPoint x="97" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="31" value="" style="curved=1;endArrow=openThin;html=1;strokeWidth=5;fillColor=#60a917;strokeColor=#2D7600;verticalAlign=middle;align=left;endFill=0;" parent="40" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="20" y="80" as="sourcePoint"/>
                        <mxPoint x="100" y="80" as="targetPoint"/>
                        <Array as="points"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="32" value="&lt;font&gt;Internal Processing&lt;/font&gt;" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=none;fillColor=none;gradientColor=none;labelPosition=left;verticalLabelPosition=bottom;spacingRight=0;" parent="31" vertex="1" connectable="0">
                    <mxGeometry x="0.1596" y="8" relative="1" as="geometry">
                        <mxPoint x="143" y="8" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="33" value="" style="curved=1;endArrow=openThin;html=1;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;resizable=0;rounded=1;strokeColor=#A50040;strokeWidth=5;align=left;verticalAlign=middle;endFill=0;fillColor=#d80073;" parent="40" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="20" y="110" as="sourcePoint"/>
                        <mxPoint x="100" y="110" as="targetPoint"/>
                        <Array as="points"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="34" value="&lt;font&gt;Final Result&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=none;fillColor=none;gradientColor=none;spacingRight=0;" parent="33" vertex="1" connectable="0">
                    <mxGeometry x="-0.1594" y="5" relative="1" as="geometry">
                        <mxPoint x="86" y="5" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="39" value="Legend" style="rounded=0;whiteSpace=wrap;html=1;align=center;verticalAlign=top;fontFamily=Helvetica;fontSize=14;fontColor=default;labelBackgroundColor=none;resizable=1;fillColor=none;gradientColor=none;movable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;fontStyle=1;strokeColor=none;shadow=0;" parent="40" vertex="1">
                    <mxGeometry width="220" height="130" as="geometry"/>
                </mxCell>
                <mxCell id="43" value="New&lt;div&gt;Record&lt;/div&gt;" style="shape=note;size=20;whiteSpace=wrap;html=1;" vertex="1" parent="1">
                    <mxGeometry x="510" y="60" width="100" height="40" as="geometry"/>
                </mxCell>
            </root>
        </mxGraphModel>
    </diagram>
</mxfile>