0

私は新しい php および mysql プログラマーです。私は非常に大量のデータを扱っており、将来的にはゆっくりと成長するため、ハッシュテーブルを使用しています。いくつか質問があります:

  1. mysqlにはハッシュテーブルが組み込まれていますか? はいの場合、それをどのように使用しますか?

  2. ハッシュテーブルに関する調査を数日行った後。ハッシュテーブルとは何かは簡単に知っていますが、作成を開始する方法がわかりませんでした。インターネット上で多くのハッシュ テーブル コードを見ました。それらのほとんどは、最初のステップでハッシュテーブル クラスを作成します。ハッシュテーブルの値をmysqlデータベースに挿入するのではなく、一時テーブルに保存するということですか?

質問 3、4、および 5 のシナリオ例: ユーザーは Web サイトでアイテムを収集できます。ハッシュ テーブルを使用して、ユーザーが収集したアイテムを挿入および取得したいと考えています。

  1. [重要] mysql データベースの構造はどのようになっている可能性がありますか?

    例: item と users テーブルを作成

    items テーブルには、item_id、item_name、item_hash_value があります。

    users テーブルには、user_id、username、item_name、item_hash_value があります。

    users テーブルが正しいかどうかわかりません。

  2. 【重要】phpとmysqlでハッシュテーブルを作成する手順は?(サンプルコードがあれば素晴らしいでしょう:))

  3. 【重要】ハッシュテーブルからデータを挿入・取得する方法は?私はphpとmysqlについて話しているので、答えが次のようになることを願っています:「mysqlクエリ、つまり、blablaからSELECT *を使用できます...」

4

4 に答える 4

2

(斜体については申し訳ありませんが、アンダースコアはそれらをトリガーできますが、段落の途中でそれを無効にする良い方法が見つかりません。斜体は無視してください。そこに置くつもりはありませんでした)

MySQL でハッシュテーブルを使用することについて心配する必要はありません。操作中に多数のアイテムをメモリに保持する場合は、単純なリストよりもはるかに高速に検索できるため、ハッシュテーブルを使用するのが適切なデータ構造です。

ただし、データベース レベルでは、ハッシュテーブルについて心配する必要はありません。レコードを保持してアクセスする最善の方法を見つけるのは 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

各項目は、項目テーブルに 1 つの (そして 1 つのみ) エントリを取得します。各ユーザーは、users テーブルで 1 つの (そして 1 つだけ) エントリを取得します。ユーザーが項目を選択すると、ユーザー項目テーブルに移動します。例:

Users:

1 | Bob
2 | Alice
3 | Robert

Items

1 | Headphones
2 | Computer
3 | 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))

users テーブルと items テーブルの user_id と item_id は主キーであるため、MySQL ではハッシュマップのように非常に高速にアクセスできます。主キーに user_id と item_id の両方を持つ user_items テーブルでは、重複がないことを意味し、高速アクセスを取得できるはずです (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

W3C のチュートリアルなど、SQL に関するガイドがインターネット上に多数あります。

于 2009-02-12T16:40:29.417 に答える
1

1) Hashtables do exist in MySQL but are used to keep internal track of keys on tables. 2) Hashtables work by hashing a data cell to create a number of different keys that separate the data by these keys making it easier to search through. The hashtable is used to find what the key is that should be used to bring up the correct list to search through.

Example, you have 100 items, searching 100 items in a row takes 10 seconds. If you know that they can be separated by type of item and break it up into 25 items of t-shirts, 25 items of clocks, items rows of watches, and items rows of shoes. Then when you need to find a t-shirt, you can only have to search through the 25 items of t-shirts which then takes 2.5 seconds.

3) Not sure what your question means, a MySQL database is a binary file that contains all the rows in the database. 4) As in #2 you would need to decide what you want your key to be. 5) #2 you need to know what your key is.

于 2009-02-12T04:16:51.107 に答える
1

ハッシュ テーブルがデータを格納する正しい方法であると思われる場合は、MySQL の代わりにCouchDBのようなキー値データベースを使用することをお勧めします。PHPを使い始める方法を示します。

于 2009-02-12T16:43:48.987 に答える
1

私は新しい php および mysql プログラマーです。私は非常に大量のデータを扱っており、将来的にはゆっくりと成長するため、ハッシュテーブルを使用しています。

元の目的を見て、代わりに「memcache」を使用してください。これは、コードの変更を最小限に抑えながら最もスケーラブルなソリューションです。データがどんどん大きくなるにつれて、memcache サーバーをスケールアップできます。

于 2011-12-06T10:20:31.283 に答える