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

Ilia
24.01.2018
13:36:02

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). В базе нужно найти запись у которой эти координаты будут либо совпадать либо быть ближайшими к этой точке.
В бд я полный нуб, юзал только ОРМки, помогите составить запрос пожалуйста

lost
24.01.2018
13:43:29

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

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

Stanislav
24.01.2018
14:06:57

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

Ilia
24.01.2018
14:08:07

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

Stanislav
24.01.2018
14:08:28

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

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

Stanislav
24.01.2018
14:11:59
Заменить запросы к гуглу это уже экономия

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
Ну да. ОДин раз индекс создашь, и будешь пользоваться.

Al
24.01.2018
16:03:02
Помоему уже даже для блокнота есть скрипт для геодаты


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


Al
24.01.2018
16:36:04
Попытался в питоне перенести, к сожалению ему что-то не нравится. Не отлаживается, знаю только что падает даже от первой строчке пир переводе в радианы
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
https://sqlite.org/rtree.html
Два вагона решений
Ибо не представишь решение работы с геоданными... все убегут к конкурентам.


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

Al
24.01.2018
22:42:38

Stanislav
24.01.2018
22:57:47

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

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 почему-то присваивает разным значениям одинаковый ключ в некоторых случаях, что мне не подходит.

lost
25.01.2018
09:41:01

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

Vladislav
25.01.2018
09:47:29

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
ну, это как сидеть на мине времён второй мировой. Шансов на то, что рванёт, не очень много, но зачем рисковать?