diff --git a/docs/Roadmap.md b/docs/Roadmap.md index 6dcef7a..799615d 100644 --- a/docs/Roadmap.md +++ b/docs/Roadmap.md @@ -12,7 +12,7 @@ - [X] File engine #### v0.2 - Usable -- [ ] Relationships +- [~] Relationships - [ ] Arrays - [X] Custom data file - [X] Date @@ -25,7 +25,7 @@ - [ ] Dump/Bump data - [ ] Recovery - [ ] Better CLI -- [ ] Linked query +- [ ] Linked query ### Beta #### v0.4 - Usability diff --git a/docs/images/logo.jpeg b/docs/images/logo.jpeg new file mode 100644 index 0000000..b8eef0c Binary files /dev/null and b/docs/images/logo.jpeg differ diff --git a/python/charts/time_usage_per_thread_1_000_000.png b/docs/images/time_usage_per_thread_1_000_000.png similarity index 100% rename from python/charts/time_usage_per_thread_1_000_000.png rename to docs/images/time_usage_per_thread_1_000_000.png diff --git a/python/charts/time_usage_per_thread_50_000_000.png b/docs/images/time_usage_per_thread_50_000_000.png similarity index 100% rename from python/charts/time_usage_per_thread_50_000_000.png rename to docs/images/time_usage_per_thread_50_000_000.png diff --git a/mkdocs.yml b/mkdocs.yml index 335181a..0f6deab 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,6 +2,21 @@ site_name: ZipponDB Documentation site_url: https://MrBounty.github.io/ZipponDB/ theme: name: readthedocs + logo: images/logo.jpeg + collapse_navigation: true + palette: + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to light mode markdown_extensions: - attr_list - md_in_html diff --git a/python/charts.ipynb b/python/charts.ipynb deleted file mode 100644 index 754acb9..0000000 --- a/python/charts.ipynb +++ /dev/null @@ -1,153 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "datas = [\n", - " {'thread': 1, 'time': 40, 'usage': 10},\n", - " {'thread': 2, 'time': 21, 'usage': 18},\n", - " {'thread': 3, 'time': 15, 'usage': 25},\n", - " {'thread': 4, 'time': 12, 'usage': 30},\n", - " {'thread': 6, 'time': 8.3, 'usage': 45},\n", - " {'thread': 8, 'time': 6.6, 'usage': 55},\n", - " {'thread': 12, 'time': 5.1, 'usage': 80},\n", - " {'thread': 16, 'time': 4.3, 'usage': 100},\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Uxg0aBBNmjTB398fm81Gjx49NFBAJBcoqInks4oVKwIQFBRE27Zts/362bNnc8cddzB58uQs+6OjoylRokS2z1euXDnAbEW5tJUvNTWVQ4cOUadOnRs6x549e674XOb+zPfJVKtWLWrVqsVrr73G6tWradasGRMnTuTdd99l3rx5JCcn88svv2RpEfzvbeHMc+7fvz9Lq9DZs2ftLYaZKlasSHx8fI6+55n279+PYRhZWqr27t0LYB8AkhvvY7XMn1E/P7/rXsfs2bPp1asXH330kX1fUlIS0dHRWY4rV66cvaXuUlf7uRERk/qoieSzdu3a4efnx/vvv09qauplz58+ffqar3d2dr6sVWTWrFn2PnDZdeutt1KyZEkmTpxISkqKff/UqVMv+7C9mo4dO7J27Vo2bdqUZX90dDTTp0+nbt269tbD2NhY0tLSshxXq1YtnJycSE5OBv5tDfrvbbQpU6ZkeV2bNm1wcXG5bNqOzz///LIaH3jgAdasWcPChQsvey46Ovqymq7k5MmTzJ07174dGxvLtGnTslxfbryP1Ro0aEDFihX58MMPiY+Pv+z5S39Gr/Tz+Nlnn2W5JQ///oysX78+y3mmT5+ey9WLFC5qURPJZ35+fkyYMIFHH32U+vXr06NHD0qWLMnRo0f57bffaNas2RWDRqZ77rmHd955hz59+tC0aVN27NjB9OnTc9yfzNXVlXfffZd+/frRunVrHnzwQQ4dOsSUKVNu+Jwvv/wys2bNokWLFvTr149q1apx8uRJpk6dyqlTp7IErD/++INnn32W7t27U6VKFdLS0vj2229xdnamW7duANx11124ubnRqVMn+vXrR3x8PF999RVBQUGcOnXKfq7g4GCef/55PvroI+69917at2/Ptm3bmD9/PiVKlMjS8vXiiy/yyy+/cM8999C7d28aNGhAQkICO3bsYPbs2Rw+fPi6LZJVqlThiSeeYMOGDQQHB/P1118TGRmZ5fpy432s5uTkxP/+9z86dOjALbfcQp8+fShVqhQnTpxg2bJl+Pn5MW/ePMD8efz222/x9/enRo0arFmzhiVLllzWX/Kll17i22+/pX379jz//PP26TnKlSt3xX5zImJSUBOxwMMPP0xYWBijRo3igw8+IDk5mVKlSnH77bfTp0+fa772lVdeISEhgRkzZjBz5kzq16/Pb7/9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LVsIDg7Gyalw3OmNi4ujRo0a7Nq1C19fX6vLyXO63sJN11u46XoLt7y83oyMDCIjI6lXrx4uLoW+XemqCn1QK4xiY2Px9/cnJiYGPz8/q8vJc7rewk3XW7jpegu3ona9VigcTUwiIiIihZCCmoiIiIiDUlArgNzd3XnzzTdxd3e3upR8oest3HS9hZuut3AratdrBfVRExEREXFQalETERERcVAKaiIiIiIOSkFNRERExEEpqImIiIg4KAW1AmLkyJE0bNgQX19fgoKC6NKlC3v27LG6rHwzatQobDYbgwYNsrqUPHPixAkeeeQRAgMD8fT0pFatWmzcuNHqsvJEeno6r7/+OuHh4Xh6elKxYkVGjBhBYRrbtHLlSjp16kRYWBg2m42ffvopy/OGYfDGG28QGhqKp6cnbdu2Zd++fdYUmwuudb2pqakMGzaMWrVq4e3tTVhYGI899hgnT560ruCbdL2/30s9/fTT2Gw2xo4dm2/15bYbud5//vmHe++9F39/f7y9vWnYsCFHjx7N/2ILGQW1AmLFihUMGDCAtWvXsnjxYlJTU7nrrrtISEiwurQ8t2HDBr788ktq165tdSl55vz58zRr1gxXV1fmz5/Prl27+OijjyhevLjVpeWJ0aNHM2HCBD7//HP++ecfRo8ezZgxY/jss8+sLi3XJCQkUKdOHcaPH3/F58eMGcO4ceOYOHEi69atw9vbm3bt2pGUlJTPleaOa11vYmIimzdv5vXXX2fz5s3MmTOHPXv2cO+991pQae643t9vprlz57J27VrCwsLyqbK8cb3rPXDgAM2bN6datWosX76c7du38/rrr+Ph4ZHPlRZChhRIUVFRBmCsWLHC6lLyVFxcnFG5cmVj8eLFRsuWLY3nn3/e6pLyxLBhw4zmzZtbXUa+ufvuu43HH388y76uXbsaPXv2tKiivAUYc+fOtW9nZGQYISEhxgcffGDfFx0dbbi7uxvfffedBRXmrv9e75WsX7/eAIwjR47kT1F56GrXe/z4caNUqVLGzp07jXLlyhmffPJJvteWF650vQ8++KDxyCOPWFNQIacWtQIqJiYGgICAAIsryVsDBgzg7rvvpm3btlaXkqd++eUXbr31Vrp3705QUBD16tXjq6++srqsPNO0aVOWLl3K3r17Adi2bRurVq2iQ4cOFleWPw4dOkRERESWn2t/f38aNWrEmjVrLKws/8TExGCz2ShWrJjVpeSJjIwMHn30UV588UVuueUWq8vJUxkZGfz2229UqVKFdu3aERQURKNGja55O1hunIJaAZSRkcGgQYNo1qwZNWvWtLqcPPP999+zefNmRo4caXUpee7gwYNMmDCBypUrs3DhQvr3789zzz3HN998Y3VpeeLll1+mR48eVKtWDVdXV+rVq8egQYPo2bOn1aXli4iICACCg4Oz7A8ODrY/V5glJSUxbNgwHnrooUK7kPfo0aNxcXHhueees7qUPBcVFUV8fDyjRo2iffv2LFq0iPvuu4+uXbuyYsUKq8sr8FysLkCyb8CAAezcuZNVq1ZZXUqeOXbsGM8//zyLFy8uEn0cMjIyuPXWW3n//fcBqFevHjt37mTixIn06tXL4upy3w8//MD06dOZMWMGt9xyC1u3bmXQoEGEhYUVyuuVf6WmpvLAAw9gGAYTJkywupw8sWnTJj799FM2b96MzWazupw8l5GRAUDnzp0ZPHgwAHXr1mX16tVMnDiRli1bWllegacWtQLm2Wef5ddff2XZsmWULl3a6nLyzKZNm4iKiqJ+/fq4uLjg4uLCihUrGDduHC4uLqSnp1tdYq4KDQ2lRo0aWfZVr1690I6YevHFF+2tarVq1eLRRx9l8ODBRaL1FCAkJASAyMjILPsjIyPtzxVGmSHtyJEjLF68uNC2pv35559ERUVRtmxZ+++vI0eO8MILL1C+fHmry8t1JUqUwMXFpUj9DstPalErIAzDYODAgcydO5fly5cTHh5udUl5qk2bNuzYsSPLvj59+lCtWjWGDRuGs7OzRZXljWbNml023crevXspV66cRRXlrcTERJycsv4/0dnZ2f4/88IuPDyckJAQli5dSt26dQGIjY1l3bp19O/f39ri8khmSNu3bx/Lli0jMDDQ6pLyzKOPPnpZv9p27drx6KOP0qdPH4uqyjtubm40bNiwSP0Oy08KagXEgAEDmDFjBj///DO+vr72fiz+/v54enpaXF3u8/X1vaz/nbe3N4GBgYWyX97gwYNp2rQp77//Pg888ADr169n0qRJTJo0yerS8kSnTp147733KFu2LLfccgtbtmzh448/5vHHH7e6tFwTHx/P/v377duHDh1i69atBAQEULZsWQYNGsS7775L5cqVCQ8P5/XXXycsLIwuXbpYV/RNuNb1hoaGcv/997N582Z+/fVX0tPT7b/DAgICcHNzs6rsHLve3+9/g6irqyshISFUrVo1v0vNFde73hdffJEHH3yQFi1acMcdd7BgwQLmzZvH8uXLrSu6sLB62KncGOCKjylTplhdWr4pzNNzGIZhzJs3z6hZs6bh7u5uVKtWzZg0aZLVJeWZ2NhY4/nnnzfKli1reHh4GBUqVDBeffVVIzk52erScs2yZcuu+G+2V69ehmGYU3S8/vrrRnBwsOHu7m60adPG2LNnj7VF34RrXe+hQ4eu+jts2bJlVpeeI9f7+/2vgj49x41c7+TJk41KlSoZHh4eRp06dYyffvrJuoILEZthFKKpwEVEREQKEQ0mEBEREXFQCmoiIiIiDkpBTURERMRBKaiJiIiIOCgFNREREREHpaAmIiIi4qAU1EREREQclIKaiFhu+fLl2Gw2oqOjrS7Frnz58owdO9bqMkSkiFNQE5E8ZbPZrvl46623rC5RRMRhaa1PEclTp06dsn89c+ZM3njjjSyLN/v4+LBx48ZsnzclJaVArhEpIpIdalETkTwVEhJif/j7+2Oz2bLs8/HxsR+7adMmbr31Vry8vGjatGmWQPfWW29Rt25d/ve//xEeHo6HhwcA0dHRPPnkk5QsWRI/Pz9at27Ntm3b7K87cOAAnTt3Jjg4GB8fHxo2bMiSJUuy1BgVFUWnTp3w9PQkPDyc6dOn5/F3RUTkxiioiYjDePXVV/noo4/YuHEjLi4uPP7441me379/Pz/++CNz5sxh69atAHTv3p2oqCjmz5/Ppk2bqF+/Pm3atOHcuXMAxMfH07FjR5YuXcqWLVto3749nTp14ujRo/bz9u7dm2PHjrFs2TJmz57NF198QVRUVL5dt4jI1ejWp4g4jPfee4+WLVsC8PLLL3P33XeTlJRkbz1LSUlh2rRplCxZEoBVq1axfv16oqKicHd3B+DDDz/kp59+Yvbs2fTt25c6depQp04d+3uMGDGCuXPn8ssvv/Dss8+yd+9e5s+fz/r162nYsCEAkydPpnr16vl56SIiV6SgJiIOo3bt2vavQ0NDAfO2ZNmyZQEoV66cPaQBbNu2jfj4eAIDA7Oc58KFCxw4cAAwW9TeeustfvvtN06dOkVaWhoXLlywt6j9888/uLi40KBBA/vrq1WrRrFixfLkGkVEskNBTUQchqurq/1rm80GQEZGhn2ft7d3luPj4+MJDQ1l+fLll50rM2gNHTqUxYsX8+GHH1KpUiU8PT25//77SUlJyf0LEBHJZQpqIlJg1a9fn4iICFxcXChfvvwVj/nrr7/o3bs39913H2CGu8OHD9ufr1atGmlpaWzatMl+63PPnj0ONaebiBRdGkwgIgVW27ZtadKkCV26dGHRokUcPnyY1atX8+qrr9qn/KhcubJ98MG2bdt4+OGHs7TSVa1alfbt29OvXz/WrVvHpk2bePLJJ/H09LTqskRE7BTURKTAstls/P7777Ro0YI+ffpQpUoVevTowZEjRwgODgbg448/pnjx4jRt2pROnTrRrl076tevn+U8U6ZMISwsjJYtW9K1a1f69u1LUFCQFZckIpKFzTAMw+oiRERERORyalETERERcVAKaiIiIiIOSkFNRERExEEpqImIiIg4KAU1EREREQeloCYiIiLioBTURERERByUgpqIiIiIg1JQExEREXFQCmoiIiIiDkpBTURERMRBKaiJiIiIOKj/B9T4ycFqs18IAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "# Extract data into separate lists\n", - "threads = [d['thread'] for d in datas]\n", - "times = [d['time'] for d in datas]\n", - "usages = [d['usage'] for d in datas]\n", - "\n", - "# Create figure and axis\n", - "fig, ax = plt.subplots()\n", - "\n", - "# Plot time vs thread\n", - "ax.plot(threads, times, label='Time')\n", - "ax.set_xlabel('Thread')\n", - "ax.set_ylabel('Time')\n", - "\n", - "# Plot usage vs thread\n", - "ax2 = ax.twinx()\n", - "ax2.plot(threads, usages, label='Usage', color='red')\n", - "ax2.set_ylabel('Usage (%)')\n", - "\n", - "# Set title and legend\n", - "ax.set_title('Time and Usage per Thread')\n", - "ax.legend(loc='upper left')\n", - "ax2.legend(loc='upper right')\n", - "\n", - "# Show plot\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "datas = [\n", - " {'thread': 1, 'time': 790,},\n", - " {'thread': 2, 'time': 446,},\n", - " {'thread': 3, 'time': 326,},\n", - " {'thread': 4, 'time': 255,},\n", - " {'thread': 6, 'time': 195,},\n", - " {'thread': 8, 'time': 155,},\n", - " {'thread': 12, 'time': 136,},\n", - " {'thread': 16, 'time': 116,},\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "# Extract data into separate lists\n", - "threads = [d['thread'] for d in datas]\n", - "times = [d['time'] for d in datas]\n", - "\n", - "# Create figure and axis\n", - "fig, ax = plt.subplots()\n", - "\n", - "# Plot time vs thread\n", - "ax.plot(threads, times, label='Time')\n", - "ax.set_xlabel('Thread')\n", - "ax.set_ylabel('Time')\n", - "\n", - "# Set title and legend\n", - "ax.set_title('Time per Thread')\n", - "ax.legend(loc='upper left')\n", - "\n", - "# Show plot\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/python/dummy_data.py b/python/dummy_data.py deleted file mode 100644 index 2892eaa..0000000 --- a/python/dummy_data.py +++ /dev/null @@ -1,58 +0,0 @@ -import subprocess -from faker import Faker -import random -from tqdm import tqdm - -fake = Faker() - -def random_array(): - length = random.randint(-1, 10) - scores = [random.randint(-1, 100) for _ in range(length)] - return f"[{' '.join(map(str, scores))}]" - -def run(process, command): - """Sends a command to the Zig process and returns the output.""" - process.stdin.write('run "' + command + '"\n') - process.stdin.flush() - - output = "" - char = process.stdout.read(1) # Read one character - while char: - if char == "\x03": # Check for ETX - break - output += char - char = process.stdout.read(1) - - return output.strip() - -# Start the Zig binary process once - - -for _ in tqdm(range(1000)): - process = subprocess.Popen( - ["zig-out/bin/ZipponDB"], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True # For easier string handling - ) - for _ in range(1000): - query = "ADD User (" - query += f"name = '{fake.name()}'," - query += f"age = {random.randint(0, 100)}," - query += f"email = '{fake.email()}'," - query += f"scores={random_array()}," - query += f"friends = []," - query += f"bday={fake.date(pattern='%Y/%m/%d')}," - query += f"last_order={fake.date_time().strftime('%Y/%m/%d-%H:%M:%S.%f')}," - query += f"a_time={fake.date_time().strftime('%H:%M:%S.%f')}" - query += f")" - - run(process, query) - # Ensure we always close the process, even if an error occurs - process.stdin.write("quit\n") - process.stdin.flush() - process.terminate() - process.wait() - -