oberon86 06.10.2012 17:39

Вам нужно искать какую-то строку в млрд строк длиной 50 символов. Как вы организуете хранение данных и поиск?

Recommended by: @rman
1. ojab 06.10.2012 17:41 YGG!

plain text @ grep

2. oberon86ojab /1 06.10.2012 17:41

быстро будет искать? )

3. oberon86ojab /1 06.10.2012 17:42

надо за сотую секунды, допустим

4. oberon86ojab /1 06.10.2012 17:47

ых, ну я делаю вот такое btree и исчу

Поиск "ПП Пуп"

^myGlobal("П","П"," ","П","у","п","а")=11192062
^myGlobal("П","П"," ","П","у","п","а","н","ь")=11367503
^myGlobal("П","П"," ","П","у","п","а","ч")=10459254
^myGlobal("П","П"," ","П","у","п","а","ш","к","о")=12646668
^myGlobal("П","П"," ","П","у","п","е","з","а")=11167157

5. ojaboberon86 /4 06.10.2012 17:48 YGG!

пиздец. В mysql захерачь, да и всё. srsly.

6. oberon86ojab /5 06.10.2012 17:50

ну тут вопрос как его захерачить чтобы поиск был быстрым, понимаш? )

7. oberon86ojab /5 06.10.2012 17:51

предыдующу хуйню я делаю в каше

8. ojaboberon86 /6 06.10.2012 17:51 YGG!

1. Захерачиваешь
2. Делаешь индекс
3. ???
4. Быстрый поиск!

9. oberon86ojab /8 06.10.2012 17:52

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

10. 238328 06.10.2012 17:53

спрошу на форуме

11. oberon86ojab /8 06.10.2012 17:53

хотя щас попробую сравнить

12. oberon86238328 /10 06.10.2012 17:53

мне скучно и я устал

13. ojaboberon86 /11 06.10.2012 17:55 YGG!

(ну и базу в память, ага)

14. oberon86238328 /10 06.10.2012 17:55

лучше просто поиздевайся надо мной)

15. 238328oberon86 /14 06.10.2012 17:56 7693624031349544764680241

снимай штанишки, милый))

16. oberon86238328 /15 06.10.2012 17:57

уже снял, что дальше?

17. 238328oberon86 /16 06.10.2012 17:57 7693624031349544764680241

начинай тереться обо мну

18. oberon86238328 /17 06.10.2012 17:58

я уже делаю это

19. 238328oberon86 /18 06.10.2012 17:59 7693624031349544764680241

делай это сильнее, шалун

20. oberon86ojab /13 06.10.2012 18:00

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

21. ojaboberon86 /20 06.10.2012 18:01 YGG!

https://dev.mysql.com/doc/refman/5.0/en/...
>USING {BTREE | HASH}

22. oberon86238328 /19 06.10.2012 18:01

трусь сильнее, я очень возбужден, стараюсь все делать хорошо

23. 238328oberon86 /22 06.10.2012 18:02 7693624031349544764680241

а теперь заканчивай, или плати

24. oberon86238328 /23 06.10.2012 18:04

кончил, но мне понравилось и я хочу еще) а дорого платить?

25. 238328oberon86 /24 06.10.2012 18:06 7693624031349544764680241

договоримся

26. oberon86ojab /21 06.10.2012 18:16

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

28. ojabrtsome /27 06.10.2012 19:25 YGG!

но у него же строки по 50 символов

30. ojabrtsome /29 06.10.2012 19:26 YGG!

ты меня троллируешь или каким-то образом не прочитал оп-пост?

32. oberon86rtsome /27 06.10.2012 19:37

я неточно выразился — максимальная длина строки — 50 символов
необходимо быстро найти
а) множество строк начинающихся с некоторой строки поиска
б) множество строк содержащих в себе в любой позиции некоторую подстроку поиска

33. ojaboberon86 /32 06.10.2012 19:45 YGG!

СТАВЬ LIKE))

35. ojabrtsome /34 06.10.2012 19:53 YGG!

прозреваю что like получше отработает

36. oberon86ojab /35 06.10.2012 19:54

ну какой нахуй лайк? )

37. ojaboberon86 /36 06.10.2012 19:55 YGG!

пиздец. https://dev.mysql.com/doc/refman/5.0/en/...

38. oberon86ojab /37 06.10.2012 19:56

я это сказал потому что он будет пиздец каким медленным же. что совершенно неприемлемо

40. ojaboberon86 /38 06.10.2012 19:57 YGG!

нухз

41. ojabrtsome /39 06.10.2012 19:57 YGG!

нухз

42. oberon86rtsome /39 06.10.2012 20:03

а можно самому определить хранение индекса и код для выборки данных по этому индексу в мускуле?)

43. ojaboberon86 /42 06.10.2012 20:04 YGG!

а ты уже попробовал и получилось слишком медленно?

45. oberon86rtsome /44 06.10.2012 20:23



ну в общем сейчас я сделал такую штуку: для каждой целевой строки мы выполняем ее разбиение на символы
и генерим такое деревцо:
page1 — первая буква строки
page2, page3 — вторая буква строки
ну дальше — третья буква и т.д.
до 50-й

все отсортировано

46. oberon86rtsome /44 06.10.2012 20:24

и это работает очень быстро. мне просто интересно было узнать как решаются такие вещи при помощи эскуэля

49. oberon86rtsome /47 06.10.2012 20:27

я тоже подумал что ты нихуя не понял, минутку)

50. ojab 06.10.2012 20:29 YGG!

а fulltext search чо, тоже медленный?

52. ojabrtsome /51 06.10.2012 20:30 YGG!

дя

53. ojab 06.10.2012 20:31 YGG!

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

55. oberon86ojab /50 06.10.2012 20:36

а как он реализуется?

59. oberon86rtsome /58 06.10.2012 20:55

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

60. generatorglukoff 07.10.2012 10:03

префиксальные деревья
бинарное дерево + хеш

алсо задача как-то подебильному поставлена

61. kurkuma 07.10.2012 12:29

сгенерирую дорвей, залью, проспамлю форумы/блоги, а потом через гугол буду искать нужную строку

62. 238328ojab /30 07.10.2012 14:37 32898004971349614587574330

я тебя троллирую(пока ты спишь)

63. ojab238328 /62 07.10.2012 14:38 YGG!

мамку свою троллируй, школьник

64. 238328rtsome /47 07.10.2012 14:41 32898004971349614587574330

ты тупой просто

65. 238328generatorglukoff /60 07.10.2012 14:44 32898004971349614587574330

затралили))

66. 238328ojab /63 07.10.2012 15:00 32898004971349614587574330

она не спит

67. eoranged 14.10.2012 20:58 Pidgin

B(+)-деревом, например.

68. oberon86eoranged /67 14.10.2012 20:59

ну собсно я так и сделол, а Intersystems Cache — это основная структура хранения данных. эскуэль сосет

70. oberon86rtsome /69 14.10.2012 21:04

вот, например http://dl.dropbox.com/u/12443803/MUMPS_1...

72. eorangedrtsome /69 14.10.2012 21:14 Pidgin

Ну там дальше по задаче нужно смотреть.
Если нужно искать точное совпадение, то всё просто и очевидно, если нужен поиск по префиксу/суффиксу/инфиксу/словоформам, то можно нагенерить нужные подстроки/словоформы для всех строчек, вычислить какие-нибудь хеши (CRC-32/FLV-64) и складировать в B-дерево их.
Дальше искать в этом B-дереве и дальше опять же по задаче: можно прямо выбирать отматчившиеся строки, а можно провести дополнительную фильтрацию результатов. В случае с 64-битным хешем, процент коллизий будет очень низкий и в большинстве ситуаций на эти коллизии можно положить хуй.
А если что-то готовое нужно, то можно sphinx заюзать.

73. eorangedrtsome /69 14.10.2012 21:14 Pidgin

И да, ты украл мой гет и я теперь тебя ненавижу.

Do you really want to delete ?