|
Организация БД
|
|||
---|---|---|---|
#18+
Добрый день подскажите, пожалуйста, как лучше организовать БД для следующего проекта. Есть автобусные станции, когда автобус подъезжает к станции бортовой компьютер передаёт через WiFi на сервер определённую статистику и данные, что-то сервер передаёт обратно - синхронизация. Вот здесь возникает вопрос по организации сервера... или серверов . Вариантов как мне видится может быть 2: 1) один центральный сервер с REST сервером, который осуществляет синхронизацию по Интернет с компьютерами автобусов + БД PostgreSQL, где всё хранится. На сервере также работает Web-клиент, через который производится администрирование и управление посредством команд REST-серверу. Т.е на сервере имеем: REST + БД PostgreSQL + Web-клиент (Веб сервер). 2) локальные сервера (БД + REST) на каждой станции (вдруг Интернет будет медленный или отсутствовать на время) + центральный (БД + Веб-клиент), который может быть одновременно и локальным. Вот по 2-му варианту, т.к. он мне представляется наиболее предпочтительным, и возникает вопрос: как организовать хранилище данных в PostgreSQL, центральное или распределённое, репликацию как организовать, полное дублирование на каждом сервере или частичное, какие инструменты применять и желательно подсказать как их применять: возможно подскажите ссылку на руководство или учебное пособие? Структура данных наверное будет не очень сложной, но их может быть достаточно много: сотни автобусов и хранение информации на протяжении большого периода времени. Благодарю! -- С уважением, Алексей. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 18:55 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Aleksey K, Не совсем понятно - при чем здесь PostgreSQL.... А по существу, я бы сказал что однозначно первый вариант. По второму варианту все придется делать ручками и потом, не накладно ли будет держать по экземпляру системы на каждой остановке ? Тут нужно больше о вандализме заботиться, чем о плохом интернете. А если в конкретном месте нет интернета, то ценность переданной в локальное место информации минимальна. Тут уж легче логику "бортового компьютера" переписывать - копить не переданную инфу и передавать все при удачной попытке соединения. Если боитесь большого объема базы, то почитайте здесь и заранее продумывайте структуру б.д. И, дополнение: за REST при работе с б.д., извините но "убивать надо" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 21:08 |
|
Организация БД
|
|||
---|---|---|---|
#18+
kira ivanov, авторНе совсем понятно - при чем здесь PostgreSQL....Не причём, про его всегда использую в качестве БД. kira ivanovА если в конкретном месте нет интернета, то ценность переданной в локальное место информации минимальна. Тут уж легче логику "бортового компьютера" переписывать - копить не переданную инфу и передавать все при удачной попытке соединения.Спасибо, интересный вариант. Подумаю. Хотя больше нравится вариант, когда сервера на нескольких станциях и между ними настроена репликация: на каждом полная копия БД. Как лучше её организовать средствами PostgreSQL? Тогда автобус сможет связаться с сервером, связь с которым лучше. Видимо выберу среднее между вашим вариантом и своей идеей. Там ещё надо большие видео файлы передавать на бортовой компьютер, синхронизировать. Тоже есть вопрос: как их лучше хранить и закачивать: с одним сервером проблем нет, если несколько - надо как-то их тоже дублировать на локальные сервера. Это наверное уже лучше через REST делать. kira ivanovЕсли боитесь большого объема базы, то почитайте здесь и заранее продумывайте структуру б.д.Да вроде не боюсь, за ссылку спасибо, посмотрю. kira ivanovза REST при работе с б.д., извините но "убивать надо"Извините, но почему?! Что не так? Там же не только данные передаются, ещё кое какая управляющая информация. REST-сервис по моему самое то. REST получает данные и записывает в базу и наоборот, что не так?! Все так делают. Кроме того, не думаю, что это хорошая идея, чтобы бортовой компьютер видел базу и общался с ней напрямую, пусть через сервисы общаются, через API, ему о базе вообще ничего знать не положено. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 21:43 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Aleksey KХотя больше нравится вариант, когда сервера на нескольких станциях и между ними настроена репликация: на каждом полная копия БД. Как лучше её организовать средствами PostgreSQL? Мультимастер репликаций из коробки нету, есть только master-slave а slave = realonly, выход один - писать тригера (скрипты) ручками... "словите" здесь - немерено всего Aleksey KТам ещё надо большие видео файлы передавать на бортовой компьютер, синхронизировать. Тоже есть вопрос: как их лучше хранить и закачивать: с одним сервером проблем нет, если несколько - надо как-то их тоже дублировать на локальные сервера. Это наверное уже лучше через REST делать. Опять REST.... я честно говоря рыдаю... почитайте про архитектуру ютуба, применительно к роликам. Под это действительно желательно иметь ряд серверов, но только для отправки контента на "бортовой компьютер" Aleksey KИзвините, но почему?! Что не так? Там же не только данные передаются, ещё кое какая управляющая информация. REST-сервис по моему самое то. REST получает данные и записывает в базу и наоборот, что не так?! Все так делают. Вы точно уверены, что хорошо знаете "что такое REST" - насколько в курсе я, это передача состояния. REST из базы ни чего не получает и ничего туда не пишет. REST это "протокол" обмена между сервером и "бортовым компьютером", но не для работы приложения с б.д.. Ответьте для себя что является состоянием автобуса и что вы собираетесь читать и апдейтить/инсертить в б.д. немного лирики, у меня сейчас "приложение" RESTfull - по максимуму (с "грамотным" соблюдением технологии), это документооборот и получается что при обновлении одного ID в базе, по данной технологии данные об объекте ВСЕ считываются и ВСЕ записываются (RESTfull однако), а это может быть и 5-10-25 Mb и 2.5 Gb Aleksey KКроме того, не думаю, что это хорошая идея, чтобы бортовой компьютер видел базу и общался с ней напрямую, пусть через сервисы общаются, через API, ему о базе вообще ничего знать не положено. об этом и речи не было :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 22:30 |
|
Организация БД
|
|||
---|---|---|---|
#18+
kira ivanovВы точно уверены, что хорошо знаете "что такое REST" - насколько в курсе я, это передача состояния.Я хорошо знаю :) - Representational State Transfer — «передача состояния представления». Я понял: вы бы хотели, чтобы я применял термин RESTful : wikiREST (сокр. от англ. Representational State Transfer — «передача состояния представления») — архитектурный стиль взаимодействия компонентов распределённого приложения в сети. REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределённой гипермедиа-системы. В определённых случаях (интернет-магазины, поисковые системы, прочие системы, основанные на данных) это приводит к повышению производительности и упрощению архитектуры. В широком смысле[уточнить] компоненты в REST взаимодействуют наподобие взаимодействия клиентов и серверов во Всемирной паутине. REST является альтернативой RPC[1]. В сети Интернет, вызов удалённой процедуры может представлять собой обычный HTTP-запрос (обычно «GET» или «POST»; такой запрос называют «REST-запрос»), а необходимые данные передаются в качестве параметров запроса[2][3]. Для веб-служб, построенных с учётом REST (то есть не нарушающих накладываемых им ограничений), применяют термин «RESTful». kira ivanovREST из базы ни чего не получает и ничего туда не пишет. REST это "протокол" обмена между сервером и "бортовым компьютером", но не для работы приложения с б.д..Это ежу понятно. Моя первая фраза была про REST-сервер (далее просто REST ), реализующий определённые сервисы, а сервер пишет в БД. kira ivanovМультимастер репликаций из коробки нету, есть только master-slave а slave = realonly, выход один - писать тригера (скрипты) ручками... "словите" здесь - немерено всегоВот ради этого ответа и затевал эту тему :) Может из коробки нету, а расширение уже есть, ваши сведения устарели: :) https://2ndquadrant.com/en/resources/bdr/ https://blog.2ndquadrant.com/bdr-is-coming-to-postgresql-9-6/ https://habrahabr.ru/post/227959/ Начну конечно с одного сервера, а там посмотрим. kira ivanovпочитайте про архитектуру ютуба, применительно к роликам. Под это действительно желательно иметь ряд серверов, но только для отправки контента на "бортовой компьютер"Вот пошли ценные советы, а не поучения. :) Спасибо, посмотрю. А точной ссылки не дадите? Накопал несколько источников: https://www.insight-it.ru/highload/2012/arkhitektura-youtube-2012/ https://www.insight-it.ru/highload/2008/arkhitektura-youtube/ - или есть лучше? Благодарю! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 23:22 |
|
Организация БД
|
|||
---|---|---|---|
#18+
kira ivanovпочитайте про архитектуру ютуба, применительно к роликам. Под это действительно желательно иметь ряд серверов, но только для отправки контента на "бортовой компьютер" Предлагаете настроить свой CDN и файлы грузить через какой-нибудь nginx proxy? Вроде не сильно сложно настроить: https://habrahabr.ru/company/sports_ru/blog/198598/ ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2017, 00:50 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Aleksey KМожет из коробки нету, а расширение уже есть, ваши сведения устарели: :) Не устарели, 9.6 уже вышел, а BDR где было, там и осталось :( и сейчас его обещают уже в версии 10.0 , но что будет - поживем увидим. Мне как-то вообще не верится, что оно будет, а если и будет то с большими ограничениями. Попробуйте взять базу гигов на 200-300 с достаточным количеством внешних ключей и в транзакциях с ней поработать. Увы, но все очень печально... Но как "поиграться" - оно работает. Так что на данный момент реализация мультимастеров это голова, руки и тригеры. Aleksey KСпасибо, посмотрю. А точной ссылки не дадите? Накопал несколько источников: Увы, не дам, самого данное направление не интересовало, с я ютубовцами часто пересекаюсь и общаемся "голосом". Направление верное :), надо строить свой CDN, сильно больших сложностей здесь нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2017, 11:28 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Aleksey K, у вас не абстрактный мультимастер, а судя по всему -- мультимастер, в котором у каждого данного есть персональный "мастер--автор"==владелец (данные "автора" меняются только самим "автором" и реплицируются по сети подписки каскадно подписчиками). если это так -- асинхронная триггерная репликация даже по произвольно перестраиваемому графу (с пересечениями) подписки реализуема. (с некоторыми оговорками[ и сложностями асинхронно накатываемых изменений ddl реплицируемых таблиц]). правда мы делали это не на базе pgq (и londiste), а писали своё, узко специализированное "pgqq". на коленке. (окончательно - с 2-мя потоками "авторства" -- от центра к узлам (настройки и прочая) и от узлов по сети к центру; хотя в основе решения было предусмотрено произвольное число потоков и направлений подписки). с потенциально несовпадающим (динамическим) партицированием реплицируемых "таблиц" (иерархий) в узлах. ну и с прочими частными особостями модели. и, насколько я понимаю, в таком случае наличие промежуточных "мастеров"--накопителей (на остановках) , не продуцирующих своих собственных данных, а только осуществляющих асинхронную развязку -- вполне не требует какого либо дополнительного подхода. хотите -- ставите "буфера" везде. хотите -- на одной из десяти остановок. правда писать по новой вот это вот всё мне было бы скорее всего лень. разве что "развить и углубить". и не всё в итоге писал я. а собственник решения -- тут где-то иногда пасётся. (его представители). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2017, 12:28 |
|
Организация БД
|
|||
---|---|---|---|
#18+
qwwqхотите -- ставите "буфера" везде. А как "буфер" по вашему должен работать? Можете подробнее объяснить пожалуйста? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2017, 12:47 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Aleksey Kqwwqхотите -- ставите "буфера" везде. А как "буфер" по вашему должен работать? Можете подробнее объяснить пожалуйста? "буфер" -- тот же узел подписки и публикации, как и любой другой узел (быть может кроме центра). в момент подключения "автобуса" -- сбрасывает "свои" (т.е. пришедшие с других узлов, т.к. собственно "своих" не имеет) накопленные данные на "автобус" и всасывает новые данные -- "с автобуса" [все данные имеют поле "собственник" -- узел --владелец данного] по настроенным очередям подписки. (с подавлением ранее перенесенных версий данных тех же очередей , произошедших по другим ветвям не древовидного графа -- т.е. другими "буферами"). (для чего версии данного нумеруются на мастерах--владельцах) т.е. он в сущности не отличается от БД "автобуса". (с тем же функционалом, и даже теми же очередями). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2017, 13:04 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Aleksey K, помню делал мултимастер ещё на 8.2, через dblink (как и qwwq, наверное), только репликация у меня шла сперва на мастер, там всякие колиззии обрабатывались локально, если надо было менялся ид (т.е. мастер сообщал слейву что надо поменять ид такой-то на такой-то), и потом уже данные передавались слейву. т.е. слейв как-бы тоже сам по себе мастер, только отличался от "мастера" тем, что не обрабатывал глобальные конфликты (человек уже есть, или компания такая есть и т.д.). и да, локальные ид более чем желательны (наверное это имел ввиду qwwq говоря об авторстве). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 09:52 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Lonepsycho, есть частный случай, когда каждое данное порождается и изменяется только в том месте (узле), где порождено. в этом частном случае коллизий в таком "авторизованном мультимастере" нет вообще. но на уровне БД надо следить, чтобы никто никогда не перешёл это ограничение. ключ данного состоит из полей ("владелец", {собственно ключ}) версия выгялдит как ({собственно ключ}, номер версии) хранятся и последние номера версий "удаленных ключей" -- чтобы например вновь возникшая версия удаленного ранее ключа не была моложе . и для правильного мерджа при нежданчиках с порядком обработки событий в сложных транзакциях с партицированными табличками, когда в after триггерах события отрабатываются совсем не в том порядке, которого ожидаешь интуитивно. (delete записи обрабатывается после последующего инсерта, например) есть отдельные модельные допущения, позволяющие передавать данные по сети в любом направлении, в т.ч. по параллельным веткам (без вызова видимости коллизии). ну и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 10:35 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Lonepsycho, ps транспорт делал не я . там жабские сервиса воркали промеж себя, кажется. я собирался написать транспорт силами самого пж (все хранимки для транспорта в пж , ессно) -- но задача стояла так, что типа горный орёл, начабанившись, спускается на равнину, и видит только интернеты. т.ч. смысла не было. и там тоже были интересные в реализации моменты -- не свалить всё в даун при вывале батча на гигабайтики, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 10:42 |
|
Организация БД
|
|||
---|---|---|---|
#18+
Я тут подумал, что проще всего на локальных RESTful серверах кэшировать запросы, а потом (или по возможности даже сразу) отправлять их на центральный RESTful сервер, который и будет писать всё в единую централизованную базу. На эти же локальные сервера будет отправляться копия медиа контента для последующей загрузки в бортовой компьютер. При такой архитектуре можно сначала сделать единый сервер, а потом, по мере необходимости добавлять локальные кэширующие. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2017, 01:22 |
|
|
start [/forum/topic.php?fid=53&msg=39410238&tid=1996685]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 369ms |
total: | 534ms |
0 / 0 |