質問調査システムを構築するという要件があります。簡単に言えば、質問が必要で、回答とユーザーの回答レコードが事前に定義されています。
- 質問には質問 ID、質問テキストが必要です
- 回答には回答 ID、回答テキストが必要です
- ユーザーの回答レコードには、レコード ID、ユーザー ID、質問 ID、回答 ID、日付、OS、IP、ブラウザ情報が必要です。
ユーザー レコードについては、すべての履歴を保持する必要があるため、"is live" 列が必要です。したがって、各ユーザーの最新の回答のみが true です。ユーザーが同じ質問に再度回答すると、このユーザーの既存の回答レコードはすべて history( is live = false ) になります。
シンプルな構造のようです。しかし、100,000 を超える質問、100 万を超えるユーザー、および各質問の各ユーザーが 20 を超える回答レコードを持っている場合、レコードは 100,000 * 1,000,000 * 20 = 2,000,000,000,000 レコードを超えます。すると大問題になる。
また、このデータをどのように使用する必要があるかを説明する必要があります。ユーザーのレコードを使用して、質問の回答基準を定義することにより、ユーザーのグループをターゲットにできる別のシステムを提供する必要があります。例えば:
(Q1=A1 && Q2=A3 && Q3=A5 && (Q4=A8 || Q5=A9))
基準 1(Q1!=A1 && Q2=A3)
基準 2(Q4=A8 || Q5!=A9)
基準 3
基準を定義した後:
- 条件に一致するすべてのユーザー ID を取得するために 1 つの API を提供する必要があります (api1)
- ユーザーのすべての基準を取得するために 1 つの API を提供する必要があります (api2)
API は高速でライブである必要があります。そして api は頻繁に呼び出されます。
1 つのテーブルに 200,000,000,000 のレコードがあると想像してみてください。API呼び出しは非常に遅くなるか、dbを殺すことさえあります.
だから、私は良くない解決策をいくつか持っています。議論できるようにここにリストします:
- 各質問には、この質問のすべてのユーザー レコードを保存するための 1 つのテーブルがあります。
- 各ユーザーは、このユーザーのすべての質問レコードを保存するための単一のテーブルを取得しました。
- 1と2の両方
しかし、解決策があまり良くなく効率的ではないことがわかります。そこで、ここで議論したいと思います。テクノロジーの種類は問いません (sql、nosql、hadoop など...)
ここにあなたの考えを入れてください。