В какой среде веб-программирования используются хеш-таблицы и другие структуры данных, обрабатывающие пары ключ, значение - PullRequest
0 голосов
/ 04 июня 2009

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

например. Я слышал, что люди помещают значения сеанса в хеш-таблицу, а затем помещают хеш-таблицу в объект Session. Я просто хотел узнать, что это было за преимущество.
- Это более производительный? - Защищает ли это от других разработчиков, помещающих переменную с тем же именем в сеанс?

Edited.

Ответы [ 6 ]

11 голосов
/ 04 июня 2009

Это все равно, что спрашивать, в чем польза от молотка при строительстве дома ... если вы хотите, чтобы это было просто, тогда используйте хэш-таблицу, просто пару ключ / значение, до вас, где разместить гвоздь

8 голосов
/ 04 июня 2009

Трудно ответить на вопрос, в основном потому, что вы ищете проблему, которая соответствует решению, а не наоборот. Впрочем, я добавлю два цента.

Переменные сеанса по существу хранят информацию для сеанса текущего пользователя. К ним обращается ключ, поэтому они действительно ведут себя так же, как хеш-таблица. Они могут даже быть реализованы под крышками (частично) как хеш-таблица - я не знаю.

Важно отметить, что переменные сеанса - это абстракция от того факта, что веб-приложения не имеют состояния. На самом деле происходит то, что вы сохраняете значение в сеансе, а когда вы возвращаете страницу, это значение сохраняется где-то (обычно в памяти или в базе данных). В следующий раз, когда от этого человека поступит запрос, переменная будет перезагружена.

Хеш-таблицы полезны в основном для быстрого доступа к большому количеству объектов или значений с помощью ключей поиска. Поскольку сеть не имеет состояния, а сеанс ограничен одним пользователем, я не вижу большой пользы для хеш-таблиц. Если вам нужно быстро получить доступ к фрагменту данных в большой коллекции, сохранение всего хеш-таблицы в конце запроса и перезагрузка его в начале запроса просто для быстрого доступа к элементу вряд ли будет эффективным использование ресурсов.

1 голос
/ 06 июня 2009

Обратите внимание, что словарь и хэш-таблица находятся на двух разных уровнях абстракции. Словарь - это то, что отображает ключи произвольного типа на значения. Хеш-таблица является одним из способов реализации словаря.

Обратите внимание, что иногда "хэш [таблица]" используется как синоним словаря, например, в% хэшей Perl.

Вы используете хеш-таблицу, когда хотите получить характеристики производительности хеш-таблицы. В большинстве случаев вас это не волнует, и вы просто оставите это как деталь реализации вашего языка программирования.

Обратите внимание, что вы можете реализовать хэш-таблицу, чтобы иметь (амортизированное рандомизированное ожидаемое) O (1) наихудший случай, но многие реализации не проходят через все накладные расходы на работу и производительность для достижения этой цели. Вам не нужно беспокоиться о том, являются ли ваши входные данные криптографическими хэшами или просто случайными, как в вашем примере (хороших) токенов сеанса, поэтому хэш-таблица может иметь меньше накладных расходов по сравнению с хэш-таблицей, реализующей произвольный словарь.

1 голос
/ 04 июня 2009

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

Каждый запрос сокета будет содержать идентификатор клиента, который будет сохранен / найден в Hashtable.

Причина, по которой я выбрал этот путь, заключается в гибкости производительности, доступной через Hashtable, которую я смогу оставить на данный момент - и настроить позже.

:)

1 голос
/ 04 июня 2009

Зависит от того, что вы подразумеваете под хеш-таблицами, например, во внутренних базах данных, которые управляют большинством веб-сайтов, есть несколько хеш-таблиц, встроенных в таблицы (в форме индексов). Также на ум приходит назначение данных для идентификаторов пользователя через переменные сеанса (или куки-файлы). Существует множество примеров использования хеш-таблиц.

0 голосов
/ 04 июня 2009

Попробуйте прочитать Определение хеш-таблицы в Википедии , чтобы узнать, как их можно использовать.

По сути, хеш-таблица - это способ сопоставления определенного ключа определенному значению. Таким образом, в случае переменных сеанса вы можете использовать переменную в качестве ключа и идентификатор пользователя в качестве значения. Это позволит вам сопоставить любые действия, предпринятые в конкретном сеансе с конкретным пользователем (тот, который вошел в этот сеанс) и приписать им любые действия. Опять же, в Википедии есть больше информации о сессиях .

...