質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

6155閲覧

Twitter API Access Token を 保存する MySQL構造についって

pac894398

総合スコア429

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

2グッド

1クリップ

投稿2016/12/23 15:10

###内部IDの記録について

Access Token は 内部ID(整数)-ランダムな文字列という構造になっています。

これを保存しておく場合 内部IDは別途カラムを作成して 保存しておく方が良いでしょうか?

それとも Access Token から 内部ID を導くのは極めて頻度が少なく
Access Token を - で分割すれば簡単に取得できることに加え、
内部ID(整数)-%と検索すれば 内部ID から Access Token も検索できるため
別途保存しておく必要はないでしょうか?

API Key の記録について

Twitter Bot サイトのように ユーザーが API Key を独自に設定することも可能にする場合、
API Key と AccessToken は同じテーブルで管理しますか?

それとも テーブルを分けておくのが望ましいでしょうか?

1つの API に 複数のユーザーが縄づく場合は 分けておいた方が良い気もしますが、
クエリの発行回数が増えるので 同じテーブルに入れておいた方がいいのかと迷っています。

解答者様の場合はどちらにするのか 理由も含めて教えていただければ幸いです
宜しくお願い致します。

mpyw, van-0215👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

内部IDの記録について

特に頭についている数字を意識したことは無かったんですが,あれユーザIDだったんですね…
但し,この事実を前提として運用する必要は無いと思います。

(アクセストークンを使いたいときいちいち結合するの面倒じゃないですか?サイズも大したことないし,両方格納しておくのが正解に思えます)

sql

1CREATE TABLE users( 2 `id` BIGINT UNSIGNED PRIMARY KEY, 3 `access_token` VARCHAR(60) NOT NULL UNIQUE, 4 `access_token_secret` VARCHAR(60) NOT NULL, 5 `screen_name` VARCHAR(20) NOT NULL, 6 `name` VARCHAR(25) NOT NULL, 7 `description` VARCHAR(180) NOT NULL, 8 `created_at` DATETIME NOT NULL, 9 `updated_at` DATETIME NOT NULL 10);

知らない間にscreen_nameが変更され,それが別の人のものに入れ替わっている可能性があるので,あえてUNIQUE制約は外しました。

API Key の記録について

最初からユーザとAPIキーが1対1で結びつかないことがわかっている場合,テーブルは分けるべきだと思います。よほど大規模なサービスでない限り,その程度の結合コストがボトルネックになることはありません。JOIN句を使えばクエリは1個に収まりますし。

それこそこの程度でボトルネックになってしまうのであれば,(綿密な設計を行った上で)ストレージとしてMySQLの代わりにRedisなどを使うことを検討すべきだと思います。

sql

1CREATE TABLE users( 2 `id` INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT, 3 `main_access_token_id` BIGINT UNSIGNED NOT NULL UNIQUE, 4 `created_at` DATETIME NOT NULL, 5 `updated_at` DATETIME NOT NULL 6); 7 8CREATE TABLE credentials( 9 `id` BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 10 `user_id` INTEGER UNSIGNED NOT NULL, 11 `access_token` VARCHAR(60) NOT NULL UNIQUE, 12 `access_token_secret` VARCHAR(60) NOT NULL, 13 `screen_name` VARCHAR(20) NOT NULL, 14 `name` VARCHAR(25) NOT NULL, 15 `description` VARCHAR(180) NOT NULL, 16 `created_at` DATETIME NOT NULL, 17 `updated_at` DATETIME NOT NULL 18);

例えばこのような設計にすれば,後からメインアカウントとして利用するトークンを変更することも非常に容易です。但し,主キーにVARCHARを使うとパフォーマンスが落ちてしまうのが難点ですね…

投稿2016/12/24 00:34

編集2016/12/24 01:29
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pac894398

2016/12/25 13:59

明確なアドバイスをいただきありがとうございます! とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問