Вопросы о Php и Mysql Hash Table - PullRequest
       36

Вопросы о Php и Mysql Hash Table

0 голосов
/ 12 февраля 2009

Я новый программист php и mysql. Я обрабатываю довольно большой объем данных, и в будущем он будет расти медленно, поэтому я использую хеш-таблицу. У меня есть пара вопросов:

  1. Есть ли в mysql встроенная функция хэш-таблицы? Если да, то как это использовать?

  2. Через пару дней проведем исследование о хэш-таблице. Я кратко знаю, что такое хеш-таблица, но я просто не мог понять, как начать ее создавать. Я видел много кодов хеш-таблиц в Интернете. Большинство из них на первом этапе создания класса хеш-таблицы. Означает ли это, что они хранят значение хеш-таблицы во временной таблице вместо вставки в базу данных mysql?

Для вопросов 3,4 и 5 пример сценария: Пользователь может собирать предметы на сайте. Я хотел бы использовать хэш-таблицу для вставки и извлечения элементов, собранных пользователем.

  1. [Важно] Как выглядит возможная структура базы данных mysql?

    например, создать элементы и таблицу пользователей

    в таблице элементов имеют: item_id, item_name и item_hash_value

    в таблице пользователей: user_id, username, item_name, item_hash_value

    Я не уверен, что таблица пользователей верна?

  2. [Важно] Каковы этапы создания хэш-таблицы в php и mysql? (Если есть пример кода, было бы здорово:))

  3. [Важно] Как вставить и извлечь данные из хеш-таблицы? Я говорю о php и mysql, поэтому я надеюсь, что ответы могут быть такими: «Вы можете использовать запрос mysql, т.е. SELECT * from blabla ...»

Ответы [ 4 ]

2 голосов
/ 12 февраля 2009

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

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

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

Структура базы данных

items table would be: item_id, item_name
Primary key is item_id

users table would be: user_id, username
Primary key is user_id

user_items table would be: user_id, item_id
Primary key is the combination of user_id and item_id
Index on item_id

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

Users:

1 | Bob
2 | Alice
3 | Robert

Items

1 | Headphones
2 | Computer
3 | Beanie Baby

Так что, если Боб выбрал наушники, а Роберт выбрал компьютер и beanie baby, таблица user_items будет выглядеть так:

User_items (user_id, item_id)

1 | 1    (This shows Bob (user 1) selected headphones (item 1))
3 | 2    (This shows Robert (user 3) selected a computer (item 2))
3 | 3    (This shows Robert (user 3) selected a beanie baby (item 3))

Поскольку user_id и item_id в таблицах users и items являются первичными ключами, MySQL позволит вам очень быстро получить к ним доступ, подобно хэш-карте. В таблице user_items наличие в первичном ключе и user_id, и item_id означает, что у вас не будет дубликатов и вы сможете получить быстрый доступ (индекс для item_id не помешает).

Примеры запросов

С этой настройкой действительно легко узнать, что вы хотите знать. Вот несколько примеров:

Кто выбрал пункт 2?

SELECT users.user_id, users.user_name FROM users, user_items
WHERE users.user_id = user_items.user_id AND user_items.item_id = 2

Сколько вещей выбрал Роберт?

SELECT COUNT(user_items.item_id) FROM user_items, users
WHERE users.user_id = user_items.user_id AND users.user_name = 'Robert'

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

SELECT user.user_name, item.item_name FROM users, items, user_items
WHERE users.user_id = user_items.user_id AND items.item_id = user_items.item_id
ORDER BY user_name, item_name

В Интернете существует множество руководств по SQL, например, учебник W3C .

1 голос
/ 06 декабря 2011

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

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

1 голос
/ 12 февраля 2009

Если вы считаете, что хеш-таблица является правильным способом хранения ваших данных, вы можете использовать базу данных значений ключей, например CouchDB вместо MySQL. Они показывают, как начать с PHP.

1 голос
/ 12 февраля 2009

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

Например, у вас есть 100 элементов, поиск 100 элементов подряд занимает 10 секунд. Если вы знаете, что их можно разделить по типу предмета и разбить его на 25 предметов футболок, 25 предметов часов, предметы рядов часов и предметы рядов обуви. Тогда, когда вам нужно найти футболку, вам нужно будет только поискать 25 предметов футболок, что займет 2,5 секунды.

3) Не уверен, что означает ваш вопрос, база данных MySQL - это двоичный файл, который содержит все строки в базе данных. 4) Как и в # 2, вам нужно решить, какой ключ вы хотите использовать. 5) # 2 вам нужно знать, какой у вас ключ.

...