Яка найефективніша методика індексації даних


10

Як ми всі знаємо, існують деякі методи індексації даних, використовуючи відомі додатки для індексації, такі як Lucene (для Java) або Lucene.NET (для .NET), MurMurHash, B + Tree тощо для No-Sql / Object Орієнтована база даних (яку я намагаюся трохи записати / пограти за допомогою C #), яку техніку ви пропонуєте?

Я читав про MurMurhash-2 і спеціально v3 коментарі кажуть, що Мурмур дуже швидкий. Також Lucene.Net має хороші коментарі до цього питання. А як щодо їхніх пам’яток пам’яті взагалі? Чи є якесь ефективне рішення, яке б використовувало менше сліду (і, звичайно, якщо швидше краще), ніж люцен чи мурмур? Або я повинен написати спеціальну структуру індексу, щоб отримати найкращі результати?

Якщо я спробую написати власне, то чи є якась прийнята шкала для хорошої індексації, щось на зразок 1% вузла даних або 5% вузла даних? Будь-який корисний натяк буде оцінений.

Відповіді:


10

Думаю, ти заплутав деякі речі у своєму питанні. Lucene (я нічого не знаю про Lucene, NET, але я припускаю, що це те саме) - це бібліотека, яка використовується для аналізу, розбиття в маркерах та зберігання документів, щоб пізніше можна було їх запитувати та отримувати. У Lucene є досить стара, але ефективна модель, вона використовує перевернуті дерева для пошуку та отримання документів. Без додаткових деталей усі документи розбиваються на лексеми (терміни), і для кожного терміну зберігається структура даних, в якій зберігаються всі документи, що містять даний термін. В якості структури даних можна використовувати BTree, хеш-таблицю, а в останніх великих редакціях ви навіть можете підключити власні структури даних.

BTree (див. Сторінку Вікіпедії для отримання більш детальної інформації) - це структура структури даних про дерево, яка підходить для роботи з великими фрагментами даних і часто використовується для зберігання впорядкованих деревом структур на диску. Для пам'яті інші дерева працюють краще.

Мурмурський хеш (детальнішу інформацію див. На сторінці Вікіпедії ) - це сімейство хеш-функцій, що використовуються в хеш-таблиці. Реалізація хеш-таблиці не важлива, це може бути стандартна ланцюгова реалізація або більш вдосконалена схема відкритого хеш-адреси. Ідея полягає в тому, що хеш-таблиці дозволяють отримати швидкий ключ із невпорядкованого набору клавіш і може відповідати на такі завдання, як: це ключова частина цього набору ключів? яке значення пов'язане з цим ключем?

Тепер повернемося до вашої основної проблеми. У вас є одна бібліотека (Lucene), а для структур даних обидві структури даних використовуються в Lucene. Тепер ви бачите, що відповісти на ваше запитання в цих умовах неможливо, оскільки вони не порівнянні.

Однак, щодо вашого сліду та результативності частина питання. Перш за все, ви повинні знати, які саме операції потрібно здійснити.

Вам потрібно лише отримати значення для ключа, або вам потрібно знайти всі елементи в діапазоні? Іншими словами, вам потрібен порядок чи ні? Якщо так, то дерево може допомогти. Якщо ви цього не зробите, то хеш-таблицю, яка швидше може бути використана натомість.

Чи є у вас багато даних, які не відповідають пам’яті? Якщо так, то допоможе рішення на основі диска (наприклад, BTree). Якщо ваші дані відповідають пам’яті, тоді використовуйте найшвидше рішення в пам’яті і використовуйте диск лише як сховище (з іншою структурою, набагато простіше).


Дуже дякую Рапайо :) Бали, які ви мені дали, дуже корисні і отримують щось зрозуміліше ... Оскільки я розробник .NET і цікавий на звичайному C (я починаю вчитися) і новий, швидкий, надійний, масштабований ancd Звичайно, повністю керований - за короткий термін: дуже схвильований - методи .. Тому мені потрібно дуже багато навчитися .. Щоб навчитися, я намагаюся прочитати стільки документів, але, як ви можете здогадатися, я на стартовій лінії .. Я не знав, що BTree має переваги на диску (у світі .Net, тому багато письменників пояснюють це таким чином: Ієрархічна структура даних на зразок Linked-List .. Не більше!) Ще раз
дякую

І якщо ви дозволите мені, поки не буде пояснення / відповіді вищої якості, ніж ваша, я хочу прийняти це як відповідь. І BTW, Lucene.NET - це .NET реалізація
луцена
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.