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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

MySQL

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

392閲覧

Nuxt.js + MySQL を使っているときの大規模配列の持ち方について

hagi5

総合スコア11

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

MySQL

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2019/07/02 00:25

前提・実現したいこと

AWSのEC2インスタンスとRDSを組み合わせて、
Nuxt.js + Express + MySQLで
ユーザがひたすら大量のアイテムをランダムに獲得していくような
ブラウザアプリケーションを作っています。
(非常に種類が多く、一度に引ける数も多いガチャと考えて頂けるとわかりやすいかと思います。)

不特定多数のユーザが100万種類超のアイテムとその個数(整数)のデータを持つとして
どのようなデータの保持のさせ方をすればよいか考えているのですが、
今いち良いデータのもたせ方を見つけられていません。

現在は愚直に100万要素数の0埋め配列を作って、アイテムのidに該当する要素を
インクリメントして、それをブラウザのローカルデータとして保存するような方法をとっているのですが
メモリを消費する上に見づらく、あまりいいやり方ではないのではないかと感じています。
このあたりの多量のデータについてうまく扱う知見があれば教えていただきたいです。
(1000 * 1000 * 1000の多次元配列にした方が効率良い・効率的な圧縮方法など)

ユーザごとにデータを保存させたいと考えているのですが、
MySQL上でもユーザのブラウザデータとしてローカルに持っても
どちらでも良いと考えています。
ユーザが大量にいる場合はMySQL上だとデータが大きくなりすぎるかと思い、
現在はユーザのローカルに保存しています。

よろしくお願いします。

該当のソースコード

仮に要素数を100万としています。

javascript

1summary_id: Array(1000000).fill(0) 2 3get_item(get_item_id){ 4 ++this.summary_id[get_item_id] 5 localStorage.setItem('summary_id', JSON.stringify(this.summary_id)); 6}

試したこと

100万次元超の0埋めArrayを作り、
ユーザが獲得したアイテムについて array[id]を1加算

補足情報(FW/ツールのバージョンなど)

├── @nuxtjs/axios@5.5.4
├── @nuxtjs/pwa@2.6.0
├── cross-env@5.2.0
├── express@4.17.1
├── forever@1.0.0
├── mysql2@1.6.5
├── nodemon@1.19.1
├── nuxt@2.8.1
├── sequelize@5.8.11
├── sequelize-cli@5.5.0
└── wikijs@5.5.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

そういう場合は連想配列を使うのが一般的です。
JavaScriptであればObjectかMapを使います。
該当のアイテムのIDに対応するキーが連想配列に存在しない場合は0として扱います。

投稿2019/07/02 00:44

devneko64bit

総合スコア164

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

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

hagi5

2019/07/02 04:22 編集

ありがとうございます。 ゲットしたアイテムを集計するとか言ったときに連想配列だと難しい気がしてるのですが、そのあたりいかがでしょう? (例えば今のコンプ率をアイテムゲットするたびに更新して表示する、など)
devneko64bit

2019/07/02 06:51 編集

配列に比べて特に難しくなることはないように思います。 コンプ率というのはどれだけの種類を持っているかということですよね。 詳しい仕様によるのでなんとも答えづらいところですが、単純にアイテムの種類に対してひとつでも持っているアイテムの種類の割合で良いのであれば、 Object.keys(items).length / アイテム種類数 のような感じで簡単に求められるかと思います。 itemsはObjectの想定ですがMapでもkeys()で同じことができます。
hagi5

2019/07/02 13:39

なるほど。ありがとうございます。 調べて実装してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問