@dba_ru

Страница 393 из 718
Ilgiz
24.01.2018
13:14:53
стрелки просто криво подставлены, они должны подходит к разрыву



Vladislav
24.01.2018
13:39:01
а у кого-нибудь есть книги/ссылки/статьи по поводу проектирования хранилищ по феншую?

Google
lost
24.01.2018
13:40:18
именно dwh ?

Vladislav
24.01.2018
13:40:56
да, типа про ODS, Meta и прочее, какие варианты есть проектирования и движения данных и т.д.

lost
24.01.2018
13:41:04
гугли Кимбалла

Vladislav
24.01.2018
13:42:55
на русском его вроде как нет, а хотелось бы на родном

Stanislav
24.01.2018
13:43:02
Всем привет Есть база sqlite, там есть таблица с полями city:str, latitude:real, longitude:real И есть например произвольная точка (14.2311, 16.2344). В базе нужно найти запись у которой эти координаты будут либо совпадать либо быть ближайшими к этой точке. В бд я полный нуб, юзал только ОРМки, помогите составить запрос пожалуйста

Vladislav
24.01.2018
13:44:02
есть книга Дейта только, я вот думал, может у кого что еще есть?

lost
24.01.2018
13:44:22
так Дейт и Кодд это батьки... Там наверное чисто концептуальные вещи для любых хранилищ

Реляционная алгебра все дела

Stanislav
24.01.2018
14:00:30
Всем привет Есть база sqlite, там есть таблица с полями city:str, latitude:real, longitude:real И есть например произвольная точка (14.2311, 16.2344). В базе нужно найти запись у которой эти координаты будут либо совпадать либо быть ближайшими к этой точке. В бд я полный нуб, юзал только ОРМки, помогите составить запрос пожалуйста
Можно делать что-то типа between, сначала найти все значения между заданным +1 и -1 (в примере точка (14.2311, 16.2344), значит искать в BETWEEN 13.2311 AND 15.2311). Потом следующая итерация, если вернулось значения искать уже +0.5 -0.5 значения и так далее, пока не будет вообще результатов Но это дикий костыль же, должно все быть проще как-то

Vladislav
24.01.2018
14:01:54
с координатами не все так просто

у вас же не только широта, но и долгота

Google
Ilia
24.01.2018
14:04:36
Ну надо поддержку ГЕОДАТА в СУБД, чтобы она была, и простанственный индекс по полю... GEOSPATIAL... Если в СУБД нет, то жопа. Можно руками конечно эмулировать, но сложновато...

Vladislav
24.01.2018
14:05:40
https://www.tutoronline.ru/blog/rasstojanie-mezhdu-dvumja-tochkami-na-ploskosti

делать расчет и потом смотреть минимлаьное

Stanislav
24.01.2018
14:06:18
https://www.tutoronline.ru/blog/rasstojanie-mezhdu-dvumja-tochkami-na-ploskosti
Да, тоже так думал Если нельяз group_by по двум полям

Vladislav
24.01.2018
14:06:19
это конечно грубое решение, а не точное для координат на планете

групп бай можно по двум полям, но это ничего не даст

Stanislav
24.01.2018
14:06:57
Ну надо поддержку ГЕОДАТА в СУБД, чтобы она была, и простанственный индекс по полю... GEOSPATIAL... Если в СУБД нет, то жопа. Можно руками конечно эмулировать, но сложновато...
Надо наверное поискать существующие алгоритмы и просто скопировать. Должно же быть что-то по поиску по координатам

Vladislav
24.01.2018
14:07:54
уууу, этого вагон, вот только там нехилые рассчеты и дополнительные библиотеки

Vladislav
24.01.2018
14:08:15
поэтому, если вам не нужна точность, то можно смело брать решение на основе двух точек

Ilia
24.01.2018
14:08:41
Это немало

Vladislav
24.01.2018
14:09:04
3 ляма в sqlite ?

Stanislav
24.01.2018
14:11:59
3 ляма в sqlite ?
А там не надо очень быстро

Заменить запросы к гуглу это уже экономия

Ilia
24.01.2018
14:12:12
Эмуляция примено так делается, всё пространство разбивается на квадраты, для каждого объекта вычисляется квадрат, куда он входит. Далее, строится индекс по иду квадрата. Потом когда тебе надо что-то найти близкое к данной точке — вычисляешь квадрат для точки, затем по индексу выбираешь все объекты в этом квадрате ( O(log n квадратов) ), потом обрабатываешь ВСЕ полученные объекты нужным образом . Соотв. чем меньше квадраты, тем лучше производительность

Stanislav
24.01.2018
14:12:47
Понял принял, спасибо

Ilia
24.01.2018
14:13:47
Жопа только этот "индекс" мейнтейнить... Часто добавляться / удаляться будут данные из этой таблицы?

Stanislav
24.01.2018
14:18:03
Ilia
24.01.2018
14:40:03
А, тогда это ВЕЛИКОЛЕПНО!

Google
Stanislav
24.01.2018
14:46:00
А, тогда это ВЕЛИКОЛЕПНО!
Не нужно каждый раз индексить?

Ilia
24.01.2018
14:47:26
Ну да. ОДин раз индекс создашь, и будешь пользоваться.

Stanislav
24.01.2018
16:34:45
https://stackoverflow.com/questions/3168904/sql-query-to-query-nearby-points-of-interest-based-on-lat-long-sqlite
Попытался в питоне перенести, к сожалению ему что-то не нравится. Не отлаживается, знаю только что падает даже от первой строчке пир переводе в радианы def calc_dist(lat1, lon1, lat2, lon2): lat1rad = math.radians(lat1) lat2rad = math.radians(lat2) result = math.acos(math.sin(lat1rad) * math.sin(lat2rad) + math.cos(lat1rad) * math.cos(lat2rad) * math.cos(math.radians(lon2) - math.radians(lon1))) * 6378.1 return result Добавление: conn.create_function("distance", 4, calc_dist) m = c.execute("SELECT * FROM data WHERE distance(latitude, longitude, 51.503357, -0.1199) > 1") Ошибка: sqlite3.OperationalError: user-defined function raised exception

Stanislav
24.01.2018
21:47:54
Кароче сделал по простому, добавил поле geohash, где хранится 6 значный код квадрата, потом просто ищу, если нет совпадения по 6 - ищу по 5, если нет по 5 - ищу по 4, потом если много городов - то благодаря сферичиским теоремам косинусов определяю расстояния, беру самое меньшее и возвращаю. Работает довольно быстро (для моих нужд точно). Спасибо вам за помощь

Alex
25.01.2018
09:16:22
Ищу себе помощника, PostgreSQL DBA в Питере, Мск или Самаре, зарплатная вилка 80-150, готовы рассмотреть начинающих.

Alex
25.01.2018
09:23:56
Подскажите в каком формате лучше хранить денежные величины в mysql, например курсы криптовалют. Пример значения: 0,000009644

Ilia
25.01.2018
09:25:34
decimal

Vladislav
25.01.2018
09:25:42
нумерик(хз,хз)

?

Anton
25.01.2018
09:25:58
DECIMAL

Ilia
25.01.2018
09:26:00
decimal
Это если точные вычисления нужны

Anton
25.01.2018
09:26:09
Ltymub k.,zn cx`n

Деньги любят счёт

Google
Anton
25.01.2018
09:26:17
Причём точный.

Ilia
25.01.2018
09:26:38
Не всегда, но если нужен точный — DECIMAL

Vladislav
25.01.2018
09:27:11
а почему нумерик не зайдет?

можно пример?

Anton
25.01.2018
09:27:28
А они синонимы с какой-то версии, насколько я помню.

Ilia
25.01.2018
09:27:42
С биткоинами как раз может быть жопа в том, что у него курс сегодня 10000 долларов, а завтра — 0.00001 долларов. Вот в тамом случае очень может быть, что можно И НУЖНО хранить в floatinb=g point

Anton
25.01.2018
09:27:43
Просто нумерик - устаревшая ветка, когда-нить выпилят

Ilia
25.01.2018
09:28:02
а почему нумерик не зайдет?
numeric & decimal — это одно и то же.

Vladislav
25.01.2018
09:28:21
хм

Anton
25.01.2018
09:28:40
http://tarlyun.com/blog/2011/03/22/xranenie-ne-celyx-chisel-v-mysql/ Вот хорошая, хоть и старая статья с разъяснениями

Vladislav
25.01.2018
09:29:52


в вертике наоборот, нумерик основной...

Anton
25.01.2018
09:30:13
Alex пролистай статью, там всё разжёвано норм

Azat
25.01.2018
09:40:30
Добрый день! Есть ли здесь кто хорошо знает Oracle? в частности нужно из набора символов сгенирировать целочисленный ключ, причем если набор символов одинаковый, то и соответственно ключи должны быть одинаковыми. Ora_hash почему-то присваивает разным значениям одинаковый ключ в некоторых случаях, что мне не подходит.

Azat
25.01.2018
09:41:24
lost
25.01.2018
09:41:59
очевидно, не использовать хэш-функции)

Alex
25.01.2018
09:42:04
Azat
25.01.2018
09:42:32
очевидно, не использовать хэш-функции)
Это я экпериментально уже понял

Alex
25.01.2018
09:47:11
может потому что в хэшах коллизии не?)
Возможно, мне дают данные по апи и как я понимаю там может быть неограниченное количество нулей

Google
lost
25.01.2018
09:47:59
а потом у тебя на этой лотерее какой-нить duplicate entry...

Anton
25.01.2018
09:48:23
Вешать хеш как праймари или юник кеи - это сильно))))

Vladislav
25.01.2018
09:48:30
ну у меня были проверки на дубликаты, за почти год работы я так и не смог получить коллизию ?

Anton
25.01.2018
09:48:51
Ну ент у тебя таланта под такое, что поделать))))

lost
25.01.2018
09:48:56
хексом перегнать каким-нибудь...

первое что в голову упало

Vladislav
25.01.2018
09:49:51
Вешать хеш как праймари или юник кеи - это сильно))))
так и делал ? бизнес ключ строился по хешу, который собирался из составного ключа

lost
25.01.2018
09:50:14
посему и везучий

Anton
25.01.2018
09:50:27
ну, это как сидеть на мине времён второй мировой. Шансов на то, что рванёт, не очень много, но зачем рисковать?

Страница 393 из 718