Skip to content

Commit 2e56421

Browse files
committed
doc(README): add description
1 parent 4f9fef0 commit 2e56421

File tree

1 file changed

+72
-1
lines changed

1 file changed

+72
-1
lines changed

README.md

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,82 @@
22
[![CI](https://github.com/emptybutton/tgdb/actions/workflows/ci.yml/badge.svg)](https://github.com/emptybutton/tgdb/actions?query=workflow%3ACI)
33
[![CD](https://github.com/emptybutton/tgdb/actions/workflows/cd.yml/badge.svg)](https://github.com/emptybutton/tgdb/actions/workflows/cd.yaml)
44
[![GitHub Release](https://img.shields.io/github/v/release/emptybutton/tgdb?style=flat&logo=github&labelColor=%23282e33&color=%237c73ff)](https://github.com/emptybutton/tgdb/releases)
5-
[![Lines](https://img.shields.io/endpoint?url=https%3A%2F%2Fghloc.vercel.app%2Fapi%2Femptybutton%2Ftgdb%2Fbadge%3Ffilter%3D.py&logo=python&label=lines&color=blue)](https://github.com/search?q=repo%3Aemptybutton%2tgdb+language%3APython+&type=code)
65
[![Wakatime](https://wakatime.com/badge/user/0d3b7ff5-0547-4323-a43e-2a7308d973a0/project/2e316b92-fcf1-44d8-ad77-6c81e23cdfe2.svg)](https://wakatime.com/badge/user/0d3b7ff5-0547-4323-a43e-2a7308d973a0/project/2e316b92-fcf1-44d8-ad77-6c81e23cdfe2)
6+
[![Lines](https://img.shields.io/endpoint?url=https%3A%2F%2Fghloc.vercel.app%2Fapi%2Femptybutton%2Ftgdb%2Fbadge%3Ffilter%3D.py&logo=python&label=lines&color=blue)](https://github.com/search?q=repo%3Aemptybutton%2tgdb+language%3APython+&type=code)
7+
[![codecov](https://codecov.io/gh/emptybutton/tgdb/graph/badge.svg?token=ILGHUT1KRH)](https://codecov.io/gh/emptybutton/tgdb)
78

89
РСУБД поверх Telegram.
910

1011
```bash
1112
pip install tgdb
1213
```
14+
15+
```bash
16+
docker pull n255/tgdb:0.1.0-slim
17+
```
18+
19+
> [!CAUTION]
20+
> **Не используйте этот проект с большим количеством ботов**, так как он нарушает правила Telegram-а и ухудшает его работоспособность из-за создания паразитической нагрузки.
21+
>
22+
> В противном случае ваши данные могут быть удалены, а аккаунты забанены.
23+
24+
## Overview
25+
`tgdb` - это СУБД хранящая данные в чатах телеграмма и предоставляющая доступ к ним в виде реляционной модели и ACID транзакций.
26+
27+
Всё взаимодействие с Telegram происходит через ботов/юзерботов, которые имеют фиксированные [лимиты](https://limits.tginfo.me/en) для отправки запросов в некотором промежутке времени и фактически являюстя арендой очень маленького кусочка инфраструктуры Telegram-а.
28+
29+
Из-за специфичных лимитов, операции над сообщениями имеют слишком разную цену, чем у операций, которыми можно обращатся с памятью или дисковым пространством, что требует альтернативных решений даже над простыми вещами, которые имеют устоявшиеся подходы:
30+
- Все операции можно выполнять за константное время (обычно от 200мс до 400мс), но чтение гораздо дороже операций записи, из-за того что читать сообщения могут только юзерботы.
31+
Для регистрации юзерботов нужен отдельный номер (а по закону РФ одно физ. лицо может иметь только 20 номеров любых провайдеров), когда для обычных ботов нужно только регестрация у BotFather.
32+
- Несмотря на сложность создания юзерботов, можно читать сразу много сообщений за одно обращение, а писать новые сообщения можно только по обращению на каждое новое сообщение.
33+
Обновления само по себе является записью, но для него первоначально необходимо найти то сообщение, которое нужно обновить.
34+
Удалять можно сразу много сообщений, которых также необходимо найти, но в отличии от обновления, удалять можно сразу много сообщений за одно обращение.
35+
36+
## Операции
37+
На данный момент можно читать кортежи только до записи, а сама запись возможна только одним bulk запросом вместе с коммитом. В дальнейшем возможно сделать выполнение операторов таким же, как в обычных СУБД, но пока это не сделано.
38+
39+
`tgdb` не использует MVCC, поэтому невозможно сделать Repeatable Read в том виде, что бы он был легче Serializable, поэтому может быть только три уровня изоляции:
40+
41+
> `n` - количество транзакций этого уровня изоляции.
42+
43+
<table>
44+
<tr>
45+
<th>Уровень изоляции</th>
46+
<th>Особенности</th>
47+
<th>Скорость старта</th>
48+
<th>Скорость коммита</th>
49+
<th>Скорость роллбека</th>
50+
<th>Память</th>
51+
<th>Главный Bottle Neck</th>
52+
</tr>
53+
<tr>
54+
<td><b>Serializable</b></td>
55+
<td>В лучшем случае позволяют избежать любых аномалий. Нужно ретраить транзакции по ошибке сериализуемости</td>
56+
<td>O(n)</td>
57+
<td>O(n)</td>
58+
<td>O(n)</td>
59+
<td>O(n^2)</td>
60+
<td>CPU и память</td>
61+
</tr>
62+
<tr>
63+
<td><b>Read Сommited</b></td>
64+
<td>Пока не существует. Транзакции могут видеть только зафиксированные данные. Любые операции чтения могут выполнятся в 3 раза дольше</td>
65+
<td>O(1)</td>
66+
<td>O(1)</td>
67+
<td>O(1)</td>
68+
<td>O(n)</td>
69+
<td>IO</td>
70+
</tr>
71+
<tr>
72+
<td><b>Read Uncommited</b></td>
73+
<td>Транзакции могут видеть не зафиксированные изменения других транзакций</td>
74+
<td>O(1)</td>
75+
<td>O(1)</td>
76+
<td>O(1)</td>
77+
<td>O(n)</td>
78+
<td>IO</td>
79+
</tr>
80+
</table>
81+
82+
> [!IMPORTANT]
83+
> Если паралельно выполняются несколько транзакций с разным уровнем изоляции, то у всей группы будут гарантии минимального уровня изоляции.

0 commit comments

Comments
 (0)