LINUX.ORG.RU

Прикрутить сетевой интерфейс к SQLite и сказать, что DBMS готова. Озвучьте минусы этого решения.

 


0

5

Это коллективный пост от трёх рыл сразу. Есть примитивная самописная на C++ СУБД. Некая не сложная софтина, внутри имеющая самописное B+-Tree или даже не B+-Tree, а что-то ещё более тупое и простое, но умеющее в сравнимый по эффективности доступ к части данных на диске. Реализована семантика таблиц. Таблица - это последовательность строк. Строка - это последовательность строго типизированных полей (колонок). Строка - это кортеж. Строки лежат отсортировано в порядке Primary Key. PK - это конкатенация (суб-кортеж) каких-то колонок, по которой (суб-кортежу) сортируются строки (ну в общем тут всё как везде, как в mysql внутри). Физически строка - это тупо конкатенация всех колонок. Например при схеме (id : int32, age : int32, time : int32) строка будет представлять собой три четырёхбайтных поля и занимать 3*4 байта. Со строками переменной длины может чуть сложнее, но вы поняли. Ну и ещё у таблички хранится схема (один раз), чтобы понимать, где в этих 12 байтах искать поле time (отступи 8 байт и вот оно).

Код очень тупой и там не особо много строк. Он настолько тупой, что нет реляционности и она не нужна - ну то есть база не понимает отношений между таблиц, форин кеев и джоинов. Таблица - это тупо «неймспейс со схемой», в который можно навалить строк. Таблица - это как каталог, куда можно напихать строк согласно схеме этой таблицы. Всё это - буквально key=value хранилка, где каждое key=value - это строка таблицы, а в качестве key рассматривается PK этой строки. Ну, логически оно и внутри MySQL такое, только MySQL умеет транзакции, ACID, реляции и всё такое, а здесь ничего этого нет. Есть какие-то простые гарантии, типа что таблица всегда в каком-то целостном состоянии. Но гарантии того, что ты прочитаешь то, что записал до этого - нет, потому что перед твоей операцией чтения кто-то другой мог зайти и насрать. Транзакций-то нет. Ну ладно, не суть. Они и не нужны. Задача только в том, чтобы пользователь видел семантику таблиц, потому что таблицы всем удобны наличием схемы и строго типизированые строки удобны потому, что есть семантика полей и типов этих полей. А, ну ещё оно умеет add column, drop column, alter column - ну бывает захотелось поле добавить или тип поменять. А, ну ещё оно умеет несколько индексов на таблицу - то есть PK может быть один, а ещё 5 индексов других типов по другим под-кортежам - это всё тоже не очень сложно и не очень интересно - каждый индекс - это просто ещё одна какая-то поисковая-индексирующая структура данных сбоку от таблицы.

Ко всему этому прикручен WAL и чекпоинты. В общем, данные не просираются - все пишущие запросы дописываются в конце файлика (который рубится на куски по 512 МБ) - (это наш WAL), и периодически делаются чекпоинты - примерно как в терминологии постгреса, но чуть проще.

Данный код работает максимально близко по производительности к какому-нибудь redis или memcache, потому что он жесть какой тупой (ни транзакций, нихрена). Максимум умного что там происходит - это выпаршивание отдельных полей из пачки байтиков по имени этих полей - то есть не тупое key=value, а умное key=value, которое понимает стурктуру value. Иногда и не понимает - есть тупые запросы типа get_all(), которые не думая отдают в сеть всю строку без её парсинга и валидации. Ну и ещё иногда происходит доступ к диску для подгрузки каких-то страниц, которых в памяти не оказалось - вот это наверное максимально умное. Даже планировщика запросов нет - в языке запросов надо явно указать каким индексом пользоваться при селектах, само не догадается. Таким образом, индексы - это как-бы отдельные структуры данных, которые смотрят в ту же таблицу и которые явно указывает юзер. Очень тупо, да, зато надёжно как кусок кирпича.

Тянет один такой процесс на сервере сейчас 20K RPS любых типов (чтение или запись) в один поток (если данные в памяти конечно есть и на долгий диск не пришлось ходить). Надо больше - горизонтально масштабируем и готово (ну да, чтобы посчитать число строк, в которых time > 123 AND time < 888, придётся послать запрос на все процессы и проагрегировать на запросчике, но это редко нужно). Опять же не суть, рассматриваем один процесс.

Тут приходит Петрович и говорит - поцоны, вы грибов хапнули, зачем вы всё это пишете на С++ с нуля? Можно же просто взять SQLite, залинковать со своим сетевым интерфейсом и DBMS готова! И думать не надо и всё оттестировано сотнями миллиардов леммингов и быстро работает - применяемость sqlite на самых слабых смартфонов для хранения конфигов и куки соврать не дадут.

Вопрос - где будут просадки по производительности или по какому-то другому важному параметру, например по поддерживаемости и изменяемости кода?

Вот например, сейчас в нашем простом коде мы имеем то преимущество, что он туп и его не много. Можем легко допиливать кастомные фичи под конкретных клиентов - например иногда клиент хочет, чтобы каждые 100 новых строк в его таблице ловко агрегировались и вставлялись в другую таблицу, в которой лежало бы только 2000 последних строк, а старые самоудалялись без тормозов. Ну и всё такое. То есть, первый пункт - простота и модифицируемость под свои нужды.

Второй пункт, вытекает из первого. Хоть в SQLite багов и нет, но применяя SQLite мы уже не умеем отвечать на вопрос «почему тормозило». Надо инвестировать полгода-год в чтение исходников SQLite фуллтайм и в становление SQLite-хакером. Сходу мы становимся рабами готовой библиотеки, про которую можем отвечать только «да хрен его знает почему не больше 4К запросов в секунду, день такой!».

Далее, какие-то приколы с SQLite, о которых мы не знаем - например какие-то неожиданные блокировки таблиц при каких-то операциях и прочая сложность, ввиду наличия транзакций или особенностей архитектуры - тут требуется помощь зала.

В общем, я сказал что хотел, послушаем мнения из зала! Просьба говна не писать, мамку не упоминать и троллингом не заниматься - оскорбления и наезды нас не растрогают - скорее всего вы будете достаточно слабы, чтобы пробить нашу челябинскую душу, и на ответку не спровоцирует, а тролление нам скучно, ибо мы сами троли 80 левела со стажем, сами кого хош гопстопнем и затроллим и за жизнь обоснуем, но в специально отведённых местах, а здесь это не интересно и нужен конструктив (даже если он очевиден и банален). Тролленх и говно будем игнорить, призываю к конструктиву в треде! Если кажется, что автор мудак и не понимает банальных вещей, то так и есть - иначе бы он на вопросы отвечал, а не задавал их. Если кажется, что с мудаками общаться бесполезно, то и не общайтесь, будет супер. Спасибо!

Ну вы продолжаете делать так как считаете правильным, а Петрович так как он считает правильным. Дальше рыночек решает какое из решений ему надо

cobold ★★★★★
()

В яндексе работаешь да? Они там любят такую ссанину писать, а потом героически решать самими ими созданные проблемы на ровном месте.

lovesan ★★
()

Пока читал - волосы на голове шевелились. Нет, вы конечно большие молодцы что смогли реализовать такую систему, я серьезно, но это велосипед без сидения. Берегите Петровича и в след раз лучше сначала спрашивайте у него.

SQLite оч хороший вариант в вашем случае, он как раз «из коробки выдает нечто среднее между 10К и 20К RPMS». Точнее можно будте сказать только проведя тесты на ваших данных. Можно еще глянуть вот тут неплохое сравнение при том что версии не самые последние в тесте, новые - быстрее.

Главное, подключайтесь к SQLite через UNIX сокет, а не TCP соединение. Это даст вам сходу прирост от 25 до 30% в скорости на ровном месте. С остальным разберетесь, да и Петрович подскажет.

Postgres вам точно не нужен, mysql может быт быстрым, но там сложнее настроить эту самую быстроту если вы его не знаете. NoSQL базы не рассматриваю т.к. не знаю точного характера работы вашей приложухи.

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)

Вот например, сейчас в нашем простом коде мы имеем то преимущество, что он туп и его не много.

По моим сугубо ИМХО представлениям, описанный тобой функционал – это не «не много». Но это субъективщина: раз вам «не много» – я б Петровича послал.

но применяя SQLite мы уже не умеем отвечать на вопрос «почему тормозило»

Тоже логично.

какие-то приколы с SQLite, о которых мы не знаем - например какие-то неожиданные блокировки таблиц при каких-то операциях и прочая сложность

На межпроцессном уровне блокируется вся база, а внутри процесса если работать в один поток, то ЕМНИП его можно скомпилять с такими флагами, чтобы вообще весь код синхронизации выкинуть.

чтение исходников SQLite

Нафиг надо. Там нормальная дока. UPD: И даже если это вам поможет ответить на вопрос «почему тормозило», вряд ли это много даст в плане «…и что с этим делать».

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от Obezyan

Главное, подключайтесь к SQLite через UNIX сокет, а не TCP соединение.

Дядя, ты больной? Какой сокет, какое TCP? SQLite это embedded. Линковка .so к приложению и прямые вызовы.

dimgel ★★★★★
()
Ответ на: комментарий от Obezyan

Пока читал - волосы на голове шевелились. Нет, вы конечно большие молодцы что смогли реализовать такую систему, я серьезно, но это велосипед без сидения. Берегите Петровича и в след раз лучше сначала спрашивайте у него.

Да у нас и правда не сильно много.

Представьте std::unordered_map<PrimaryKey, Row> data;, который на старте целиком грузится в память и иногда сбрасывается на диск в fork() и прикрученный к этому делу сетевой интерфейс типа google protobuf и вот будет наша система. Никаких там блокировок, потому что один поток, никаких транзакций и хитрого вида запросов. Этакий чуть усложнённый ECHO-сервер. Ну или можно представить себе std::vector<Row> data; отсортированный по какому-то полю в этом Row, данные в котором ищутся бинпоиском. Или, допустим, в памяти лежит каждый 1024-й Row, а промежуточные поднимаются с диска по мере надобности - этакое 2-этажное фиксированное вырожденное «B+-Tree курильщика», позволяющее иметь максимум 1 доступ к диску в любом случае. Поднятые с диска блоки лежат в LRU на фиксированное их число. Тупо охренеть как, но нормальное B+-tree будет эффективнее на ноль процентов. А новые данные вставляем в какой-то in-memory хеш-таблиц. При поиске проверяем сначала in-memory, потом «дисковый». Получается некий такой LSM. Кончилось ОЗУ под in-memory - смёржили в fork()-е с дисковой частью, перезапустились, живём снова.

Теперь если представить, что все упомянутые тут сущности чуть-чуть оптимизированы в каком-то плане или переписаны на свои не сильно более сложные структуры данных (за годы существования системы), минимизирующие оверхед или позволяющие хранить часть данных на диске (курс «структуры данных во внешней памяти Максима Бабенко»), вы и получите нашу систему. Тут всё ещё не будет никаких транзакций, никакой многопоточности и никакого автоматического решардирования с блек джеком и шлюхами, всё ещё очень просто и тупо. Там реально работы любому увлечённому программисту на месяц по вечерам.

Внутренности SQLite в сравнении с этим кажутся космолётом. Там только код разбора SQL (которого у нас нет) и превращения его в какой-то там план выполнения запроса или просто в AST дерево будет сложнее чем всё что у нас написано)

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 4)

Ты прикалываешься?

Шли нафиг. У тебя специализированное эффективное решение и тебе его предлагают заменить на обкостыленный ширпотреб общего назначения.

А баз «с сетевым интерфейсом» кстати и так полно без прикручиваний, но их тоже не надо если ты уже сделал специальное под задачу.

Вопрос - где будут просадки по производительности или по какому-то другому важному параметру, например по поддерживаемости и изменяемости кода?

Да.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Я считаю, бесполезно спрашивать мнение со стороны и опираться на него.

Нужно сделать тестовый проект, намакетировать на sqlite в общих чертах то, что у вас работает. И прикинуть косты по поддержке и допилу.

wandrien ★★
()

А, ну ещё оно умеет add column, drop column, alter column - ну бывает захотелось поле добавить или тип поменять.

И снова не удержался: а что вы делаете когда (1) «drop column» отбрасывает часть «primary key», (2) «alter column» приводит к truncation / rounding? Ну, это я так - мысли вслух…

bugfixer ★★★★
()
Последнее исправление: bugfixer (всего исправлений: 2)

Если вам нужна сетевая база данных, то брали бы сетевую базу данных. Все давным-давно было решено за вас. Начиная от postgres/mysql и заканчивая Firebird. Или брать NoSQL tarantool/reds/elasticsearch/mongodb.

Вот например, сейчас в нашем простом коде мы имеем то преимущество, что он туп и его не много. Можем легко допиливать кастомные фичи под конкретных клиентов - например иногда клиент хочет, чтобы каждые 100 новых строк в его таблице ловко агрегировались и вставлялись в другую таблицу, в которой лежало бы только 2000 последних строк, а старые самоудалялись без тормозов. Ну и всё такое. То есть, первый пункт - простота и модифицируемость под свои нужды.

Вы изобрели тригеры, хранимые процедуры и ограничения таблиц. Во всех базах данных это уже есть. Пишутся на SQL + свой язык для каждой СУБД (PL, Lua)

Второй пункт, вытекает из первого. Хоть в SQLite багов и нет, но применяя SQLite мы уже не умеем отвечать на вопрос «почему тормозило». Надо инвестировать полгода-год в чтение исходников SQLite фуллтайм и в становление SQLite-хакером. Сходу мы становимся рабами готовой библиотеки, про которую можем отвечать только «да хрен его знает почему не больше 4К запросов в секунду, день такой!».

Надо понимать какой параметр за что отвечает и что приобретаем и от чего отказываемся, если какой-то параметр изменяем.

Далее, какие-то приколы с SQLite, о которых мы не знаем - например какие-то неожиданные блокировки таблиц при каких-то операциях и прочая сложность, ввиду наличия транзакций или особенностей архитектуры - тут требуется помощь зала.

Если надо прям что-то очень идеальное, то покупайте Oracle, MS SQL или DB2 и будет вам счастье. Или наймите нормального спеца по БД, который понимает что и как надо делать, и как не надо делать.

dicos ★★
()

Я бы Петровича послал лесом.

У вас готовое решение, а SQLite НЕ ПРЕДНАЗНАЧЕНА для работы по сети. Это очень хороший продукт, причём для многих применений. Я, например, использую для того, чтобы один и тот же код у меня работал и в локальном, и в клиент-серверном варианте (локальный — SQLite, клиент-серверный — PostgreSQL).

Но не надо саму SQLite тащить в сеть. Если только обмазать кучей всяких внешних защит и блокировок… после чего ВНЕЗАПНО окажется, что полученного монстра сопровождать тяжелее, чем ваше уже работающее решение.

hobbit ★★★★★
()

Надо инвестировать полгода-год в чтение исходников SQLite фуллтайм и в становление SQLite-хакером. Сходу мы становимся рабами готовой библиотеки, про которую можем отвечать только «да хрен его знает почему не больше 4К запросов в секунду, день такой!».

Хм… а вас не напрягает, что Линукс не вами разработан, и приходится быть «рабом готовой ОС». А ведь там тоже периодически возникают проблемы типа «ой, у меня адаптер 1Гбит, а в Линукс типа выжимает из него пару мегабит всего».

SQLite, залинковать со своим сетевым интерфейсом и DBMS готова! И думать не надо и всё оттестировано сотнями миллиардов леммингов

там не просто «сотни миллиардов леммингов» тестируют, а серьезный подход:

https://www.sqlite.org/testing.html

seiken ★★★★★
()

Можно же просто взять SQLite

SQL тут непонятно каким боком

если хочется новых ощущений - тут скорее LMDB

хотя и своем можно сидеть если нервы не теребит и кушать не просит, нафиг все эти необоснованные инновации

olelookoe ★★★
()

Взяли да прикрутили, вам по сути надо просто сделать прокси данных из блобов в SQL, а затем прокси выборки вместо блобов из SQL. Можно прикрутить на живую прозрачно и оттестировать лишь на части.

А можно взять luajit через FFI замапить структуры (уже существующего решения) в таблицы, и делать выборку просто по ключам, так сами данные будут чистыми сишными блобами, а доступ к конкретным полям будет через хештабли луа прозрачно для вас, с помощью метатаблиц, а именно __index можно сделать так что при запросе в таблицу ключа t['где деньги?'] который не существует, но нужен, метаметод будет делать выборку из файловой системы и помещать данные в таблицу и всё это прозрачно без ручных телодвижений, так таблицы будут наполняться данными только теми которые действительно нужны. Конечно есть ограничения по памяти, с FFI придётся поработать.

Но прежде всего вопрос, если у вас и так всё работает и данные сейчас упакованы в памяти, а их распаковка заключается только в выборке sizeof(data_type) тем или иным способом типа сдвинул указатель вытащил N*X байт и выдал. То зачем городить огород внедряя ещё что-то? Если разве что ради ускорения сложной выборки, всё остальное внесёт тормоза по определению. К тому же сам сказал что вам надо под клиента менять структуру данных, как это ляжет на SQL у которого структура данных в табличках фиксирована? Под каждого клиента свою табличку? Или Горсть универсальных и сложный запрос по формированию из них для каждого конкретного случая. Но как это ляжет на вставить список в список вьяяпъросикъ :)

Очень тупо, да, зато надёжно как кусок кирпича.

Ну и нехай трогать, сами себе приключений на жопу ищите. Но никто не мешает вашему Петровичу сесть и параллельно реализовать то что он предложил, а потом испытать это и узнать чё как.

Может вообще взять Tarantool и переписать всё на него. Хер знает.

Ну хотел диванную аналитику, вот я принёс :3

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Если он у вас работает как редис, так и поставьте себе редис. Там по сути такой же std::unordered_map<PrimaryKey, Row> data со сбросом на диск иногда. Займитесь лучше масштабированием, чем таким великом.

crutch_master ★★★★★
()
Ответ на: комментарий от lesopilorama

надо накручивать самописный слой семантики таблиц

а чо его накручивать если он уже у вас там есть.

убирается только самописный энжин хранения и извлечения по ключу. (что вполне имеет смысл сделать)

если имелся в виду какой-то другой рокетсайнс то я его, видимо, не вкурил

olelookoe ★★★
()
Ответ на: комментарий от Shadow

Кстати хорошее направление ввалить люлей Петровичу - «почему сразу не postgresql». Да, зачем эти полумеры в виде sqlite.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)

Если этот движок - ваше конкурентное преимущество, то оставляйте и развивайте. Если этот движок - просто необходимая для работы шняга, а ваше конкурентное преимущество в другом, то по возможности его надо заменять на готовую компоненту, чтобы минимизировать затраты усилий на то, что вам не приносит больше денег. Это с точки зрения бизнеса так выглядит.

С точки зрения технической - ты сам всё описал, если разбираться в sqlite придётся, то это будет сделать сложней, чем в своём коде. Тут надо думать, простого ответа тут нет.

Ещё одно измерение это найм работников. Что будет с этим кодом через 10 лет, когда вы все уволитесь, по нему потопчутся джуниоры и индусы.

Может быть лучше просто послать лесом клиентов, которым надо больше 4000 RPS. А может быть нет. Вам видней.

vbr ★★★
()
Ответ на: комментарий от vbr

Спасибо, всё логично. Причём, с точки зрения «разбираться в SQLite» я лучше пойду по пути «разбираться в Postgres» - работу легче найду.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от Obezyan

Перед тем как вваливать люлей Петровичу

Да тут конфликт интересов. Запиливать решение петровича, чтобы его протестить и опровергнуть - это лень, пусть сам делает. Пока что хотелось послушать ушами слова из рта или рук других людей, которые сталкивались.

lesopilorama
() автор топика
Ответ на: комментарий от Obezyan

Так с этого нужно было начинать. Как вы скромно умолчали о конфликте интересов :) Страстотерпцы вирджин С++-скопцы vs смузихлеб-чад Петрович. Так вижу.

Ну да, но не совсем. Конфликт везде есть. Просто Петрович пришёл и ляпнул, а работать нам. Пусть сам работает. А раз он ляпнул, то хотелось бы ему ляпнуть в ответ, вот ищем что ляпнуть. Если он прав, то будем работать как он сказал, сила в правде)

lesopilorama
() автор топика

Прям дежавю, тогда расскажу свою “печальную” историю. Я больше чем 20 лет назад после университета начинал работать в одной компании которая занималась решениями для ГИС . И тоже у нас был проект своей СУБД с “особой фишкой” пространственным индексом на основе R деревьев и второй тип был на основе Z-curve. А так да все было тоже самое, B+ деревья в основе, сжатия данных на страницах, ACID, WAL и пр, даже поддержка в урезанном виде SQL, реализованная на YACC/BISON.

Мне очень нравился данный проект я на нем очень сильно вырос с мидла до лида, плюс огромное количество разных задач было решено особенно нравилось ковырятся со сжатием данных, особенно круто получилось сделать succinct, когда для чтения сжатых данных не нужно было распаковывать данные в память, особенно это было эффективно на больших шейп данных где миллионы точек.

Но как всегда есть огромное но, по мере роста кастомеров, увеличивались разные запросы в сторону реализации полноценной СУБД, один из примеров у кастомера росли объемы данных речь шла о каких террабайтах, встал вопрос бэкапов, нужно прям было делать “взрослую” систему бэкапов фулл бэкапы, дифф бэкы, бэкапы логов транзакции, все эти цепочки и пр, один кастомер хотел даже полноценной реализации VSS Writer-а (это для Windows) что бы сторонние бэкап приложения могли работать, потом были запросы на кластерную реализацию и пр. И получалось так что все это шло в сторону реализации полноценной СУБД которая по своему факту не являлась основным бизнесом.

Да наше решение выигрывало у общепопулярных СУБД, но тут как раз нет ни чего удивительного поскольку кастомное решение будет быстрее общего, но когда пошли заявки на серьезный энтерпрайз то стало очевидно, что наша доморошенная “СУБД” начинает сильно тормозить продажу высокоуровневых фичей (всякие пространственные бизнес анализы и пр) и в какой то момент стало очевидно что “дешевле” использовать полноценную СУБД благо что у них у всех почти есть пространственные индексы, отдельно графовые структуры и пр. И в итоге жирный энтерпрай стал юзать MSSQL либо Oracle, да где то мог просесть перфомонс, но все решалось либо тюнингом базы (если это возможно) либо просто более мощным сервером. Что же касается SQLite то лет пять назад, я участвовал в одной “халтурке” и в качестве СУБД использовали SQLite, в нем уже из коробки есть пространственный индекс правда на R-деревьях, который при определенных данных ведет себя хуже Z-curve и есть все почти все фишки полноценной СУБД, единственное в чем мне пришлось допиливать SQLite это добавлять туда шифрование, но благо SQLite хоть и написан на чистом Си, при этом в целом хорошо сделаны абстракции и встроить шифрование было не сложно, там есть абстракция файловой системы и AES-XTS “идеально” встал.

И собственно мой вердикт такой, если у вас СУБД не главная часть бизнеса, а лишь вспомогательный инструмент в большом программном продукте, то лучше посмотреть в сторону готовых СУБД иначе в какой-то момент может так получиться что придется кучу сил тратить что бы своя СУБД была похоже на какую то коммерческую или бесплатную, потому что так хотят большие кастомеры.

Hilbert
()
Ответ на: комментарий от Obezyan

Вам накидали кучу вариантов вплоть до редиски (Redis), почитайте обзоры по там названиям что вам дали, многие опросы отпадут сами собой.

Варианты чего. Не было запроса на варианты, вопрос был тупее - в каком месте мы проиграем, если мы поменяем нашу кастомную СУБД на SQLite с прикрученным к нему нашим сетевым интерфейсом.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от lesopilorama

в каком месте у нас отвалится жопа

Из того скудного описания данных что вы предоставили - ни в каком не отвалится, наоборот, станет мягче т.к. у велосипеда появится сидение.

Не совсем понятно причем тут сетевой интерфейс? Ваша программа получает данные по сети через этот самый сетевой интерфейс, но общение с SQLite же предполагается напрямую, т.е. ваша программа и бд физически на одной машине. Если нет то давайте подробности.

Obezyan
()
Ответ на: комментарий от Obezyan

Из того скудного описания данных что вы предоставили - ни в каком не отвалится, наоборот, станет мягче т.к. у велосипеда появится сидение.

Не совсем понятно причем тут сетевой интерфейс? Ваша программа получает данные по сети через этот самый сетевой интерфейс, но общение с SQLite же предполагается напрямую, т.е. ваша программа и бд физически на одной машине. Если нет то давайте подробности.

Во-о-от, всё правильно. Отвечено чётко по делу. Не отвалится ни в каком, Петрович прав. Засчитано! Правда, про седение не понял - подразумевается SQL что-ли? Так у нас щас свой язык запросов, к которому все наши кастомеры привыкли и пересаживаться не хотят, им примерно похрен - там давно коммуникации между нашим продуктом и потребителем написаны 10 лет назад и переписывать никому не надо…

lesopilorama
() автор топика
Ответ на: комментарий от lesopilorama

подразумевается SQL что-ли? Так у нас щас свой язык запросов, к которому все наши кастомеры привыкли и пересаживаться не хотят

ммм, господа, да у нас vendor-lock на уровне запросов получается.

А можно пару примеров ваших запросов, достаточно одного на вставку данных и одного на выборку. Не поржать ради (хотя и не без этого), а для того чтобы понять насколько вообще переход на что-либо будет оправдан.

Obezyan
()
Ответ на: комментарий от lesopilorama

оторый на старте целиком грузится в память и иногда сбрасывается на диск

Так это вы сделали аналог редиса с фиксированной схемой. У которого кстати есть сеть и куча других фишечек, в том числе зайчатки транзакций (сори за видео https://www.youtube.com/watch?v=WQ61RL1GpEE)

goingUp ★★★★★
()

Тут приходит Петрович и говорит - поцоны, вы грибов хапнули, зачем вы всё это пишете на С++ с нуля? Можно же просто взять SQLite, залинковать со своим сетевым интерфейсом и DBMS готова!

Вот Петрович как раз сам грибов хапнул, SQLite c сетевым интерфейсом уже есть, и это postgres или mysql) Не, ну правда, зачем тратить человекочасы и из sqlite лепить недомускул, если все уже сделано.

goingUp ★★★★★
()

смотря в чём ваш бизнес..

если барыжите конкретно движом, то конечно менять не стоит, это-ж деньги.

а скорее прибыль идёт не от базы, а от того что сверху. А с базы сплошные расходы :-) Даже элементарный код приходится хоть как-то поддерживать. За вас никто в его дебри не полезет и не поможет. И чем дальше тем хуже, уже наверное целый вело-парк.

Сходу мы становимся рабами готовой библиотеки

вы сейчас уже стали рабами собственной библиотеки.

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от MKuznetsov

вы сейчас уже стали рабами собственной библиотеки.

Скорее рабами стали их клиенты которых «все устраивает». Да и они пилят это так как есть походу только потому что только так и знают. Героически переизобретать работу с БД со своим «языком запросов» за деньги клиентов это конечно интересно и вкусно, но такое прокатывает до первого нанятого архитектора Петровича.

Obezyan
()