http://mimimir.ru                              Индексирование                            многомерных данных               ...
http://mimimir.ru                            Данные                            Запросы                            Какой со...
http://mimimir.ru                                       Данные                            Одна таблица или Materialized vi...
http://mimimir.ru                              Запросы «оконного» типа                            SELECT *                ...
http://mimimir.ru                               Что использовать?                            NoSQL (mongo, redis, etc)    ...
http://mimimir.ru              Древовидные структуры данных                                                        N ~ exp...
http://mimimir.ru                       Стандартный индекс по полю                            B-дерево и его варианты:    ...
http://mimimir.ru                                  Мультииндекс                Мультииндекс == Индекс по compound key     ...
http://mimimir.ru                                         Z-кривая                            Способ перенести многомерные...
http://mimimir.ru                             Несколько индексов                              в одном запросе             ...
http://mimimir.ru                            Пространственные деревья      Индексирование многомерных данных, Стас Кельвич...
http://mimimir.ru                              PostgreSQL Point       CREATE INDEX ON prices USING GIST(point("from", "val...
http://mimimir.ru                            we need to go deeper      Индексирование многомерных данных, Стас Кельвич    ...
http://mimimir.ru                                      PostgreSQL Cube                            CREATE EXTENSION cube;  ...
http://mimimir.ru                            PostgreSQL KNN Search                    KNN, поиск ближайших соседей        ...
http://mimimir.ru                            PostgreSQL KNN Search                  Изменена функция отбора листьев       ...
http://mimimir.ru                             PostgreSQL KNN Search                            Получаем отсортированные да...
http://mimimir.ru                                        Оператор <*>                              Левый аргумент:        ...
http://mimimir.ru                                 R-Tree в SQLite                            Стандартное расширение       ...
http://mimimir.ru                             PostgreSQL SP-GIST                            Многообещающе, т.к. есть kd-tr...
http://mimimir.ru                                   Спасибо                                 за внимание!      Индексирован...
Upcoming SlideShare
Loading in …5
×

Индексирование многомерных данных

1,157 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,157
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
10
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Индексирование многомерных данных

  1. 1. http://mimimir.ru Индексирование многомерных данных Стас Кельвич Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  2. 2. http://mimimir.ru Данные Запросы Какой софт использовать B-деревья Пространственные деревья PostgreSQL Point, Cube, KNN SQlite R-Tree (BDB layer) Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  3. 3. http://mimimir.ru Данные Одна таблица или Materialized view 10^8 –10^9 записей Поля: целые числа и даты «Никакая» селективность Сохранность не критична Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  4. 4. http://mimimir.ru Запросы «оконного» типа SELECT * FROM prices WHERE "adult_count" = 2 AND "country_id" = 1 AND "value" BETWEEN 90 AND 8181 AND "from" BETWEEN 1354996800 AND 1356897600 AND "night_count" BETWEEN 7 AND 10 AND "paid_children_count" = 0 ORDER BY value ASC LIMIT 20; Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  5. 5. http://mimimir.ru Что использовать? NoSQL (mongo, redis, etc) Поисковые движки (sphinx, lucene и производные) SQL базы данных Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  6. 6. http://mimimir.ru Древовидные структуры данных N ~ exp(d) d ~ log(N) Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  7. 7. http://mimimir.ru Стандартный индекс по полю B-дерево и его варианты: B* PostreSQL, MySQL B++ MSSQL Индекс для страничной памяти Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  8. 8. http://mimimir.ru Мультииндекс Мультииндекс == Индекс по compound key column1_column2_column3 Работает до первого неравенства Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  9. 9. http://mimimir.ru Z-кривая Способ перенести многомерные данные в одно измерение с сохранением топологии (!) Медленный range Быстрый range есть, запатентован, Transbase (UB-tree) Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  10. 10. http://mimimir.ru Несколько индексов в одном запросе Memory bitmap (PostgresQL) Метод для бедных, лучше чем ничего Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  11. 11. http://mimimir.ru Пространственные деревья Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  12. 12. http://mimimir.ru PostgreSQL Point CREATE INDEX ON prices USING GIST(point("from", "value")); SELECT * FROM prices WHERE point("from", "value") <@ box ((1354996800,1356897600),(90,8181)) ORDER BY value ASC LIMIT 20; Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  13. 13. http://mimimir.ru we need to go deeper Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  14. 14. http://mimimir.ru PostgreSQL Cube CREATE EXTENSION cube; CREATE INDEX ON prices USING GIST(cube(array[f1,f2,f3])); SELECT * FROM prices WHERE cube(array[f1,f2,f3]) <@ cube (10,10,10),(99,99,99); Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  15. 15. http://mimimir.ru PostgreSQL KNN Search KNN, поиск ближайших соседей Неинформативный поиск: что-то среднее между условием в блоке WHERE и сортировкой в ORDER BY Начиная с PostgresQL 9.1 патч knngist включили в основную ветку Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  16. 16. http://mimimir.ru PostgreSQL KNN Search Изменена функция отбора листьев (реагирует на ORDER BY) При обходе дерева строится priority queue Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  17. 17. http://mimimir.ru PostgreSQL KNN Search Получаем отсортированные данные за одно сканирование индекса SELECT * FROM places WHERE location <@ box (100,100),(200,200) ORDER BY location <-> point (101,456) LIMIT 10; Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  18. 18. http://mimimir.ru Оператор <*> Левый аргумент: кубик Правый аргумент: 2*k сортировка по k-ой коорд. по возрастанию 2*k+1 сортировка по k-ой коорд. по убыванию SELECT * FROM prices WHERE cube(array[f1,f2,f3]) <@ cube (10,10,10),(99,99,99) ORDER BY cube <*> 6; Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  19. 19. http://mimimir.ru R-Tree в SQLite Стандартное расширение От одного до пяти измерений Бэкэндом может быть BerkeleyDB Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  20. 20. http://mimimir.ru PostgreSQL SP-GIST Многообещающе, т.к. есть kd-tree Пока только для точек Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12
  21. 21. http://mimimir.ru Спасибо за внимание! Индексирование многомерных данных, Стас Кельвич 15.12.2012Saturday, December 15, 12

×