問題タブ [large-data]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - MySQLで一意の値の大きなテーブルを維持する
これはおそらく一般的な状況ですが、SOまたはGoogleで具体的な答えを見つけることができませんでした。
MySQLデータベースに友人関係の大きなテーブル(> 1000万行)があります。これは非常に重要であり、重複する行がないように維持する必要があります。このテーブルには、ユーザーのuidが格納されます。テーブルのSQLは次のとおりです。
テーブルが機能する方法は、各ユーザーが発見されて保存される必要がある約1000程度の「可能性のある友人」を持っているということですが、重複する「可能性のある友人」は避ける必要があります。
問題は、プログラムの設計により、1日の間に、重複する行エントリであるかどうかに関係なく、100万行以上をテーブルに追加する必要があることです。簡単な答えは、各行をチェックして重複しているかどうかを確認し、重複していない場合はテーブルに挿入することです。ただし、テーブルのサイズが1億行、10億行以上に増えると、この手法はおそらく非常に遅くなります(すぐにそうなると思います)。
このユニークなテーブルを維持するための最良の(つまり最速の)方法は何ですか?
常に一意の値のみを持つテーブルを用意する必要はありません。バッチジョブには1日1回必要です。この場合、可能なすべての行(重複する行とすべてを含む)を挿入するだけの別のテーブルを作成し、1日の終わりに、最初のテーブルのすべての一意の行を計算する2番目のテーブルを作成する必要がありますか?
そうでない場合、このテーブルを長期的に使用するための最良の方法は何ですか?
(インデックスが長期的な解決策として最適な場合は、使用するインデックスを教えてください)
c++ - 2D、C++ の k 個の最近傍すべて
データセットの各点について、最も近いすべての点を見つける必要があります。データセットには約が含まれています。1000 万の 2D ポイント。データはグリッドに近いですが、正確なグリッドを形成していません...
このオプションは、(私の意見では) KD ツリーの使用を除外します。基本的な前提は、同じ x 座標と y 座標を持つポイントがないことです。
この問題を解決するには、O(n)以上の高速アルゴリズムが必要です(ただし、実装にはそれほど難しくありません:-)))...ブーストは標準化されていないため、使用したくありません...
回答またはコードサンプルをありがとう...
c++ - ソートされたベクトルからソートされたサブベクトルをすばやく取得する方法
次のようなデータ構造があります。
それらのベクトル(サイズN(100000と考えてください)、値でソート(プログラムの実行中は一定のまま):
今、私は関数を書きたい
これは、渡されたID (サイズM < N ( Nの約 0.8 倍) )で指定された、並べ替えられた値のサブセットでoutパラメータを埋めます。関数パラメーターからのヘルパー データ) または 1 回だけ実行される何かは完全に問題ありません)。
これまでの私の解決策: idを含む
ルックアップテーブルlutを作成 ->値のオフセット(準備、したがって一定の実行時間)
create 、サイズ N、各 id の無効な id ( Nで線形)で埋められ、 tmpを介して ( Mで線形)
ループ
にコピーされます、項目をoutにコピー ( Nで線形)std::vector<X> tmp
values[lut[id]]
tmp[lut[id]]
これはNで線形です ( Mよりも大きいため) が、一時変数と繰り返されるコピーは私を悩ませます。これよりも速くする方法はありますか?MはNに近いため、O( M log N ) は好ましくないことに注意してください。
編集: http://ideone.com/xR8Vpは、前述のアルゴリズムのサンプル実装であり、目的の出力を明確にし、線形時間で実行可能であることを証明します。問題は、一時変数を回避するか、高速化する可能性についてです他の方法では、線形ではないものは高速ではありません:)。
mysql - 30M 行の Innodb テーブルから 5K 行を削除する最良の方法
テーブル:
- 外部ID_1
- 外部ID_2
- 整数
- 日付1
- 日付2
- プライマリ (foreign_id_1、foreign_id_2)
クエリ:delete from table where (foreign_id_1 = ? or foreign_id_2 = ?) and date2 < ?
日付クエリを使用しない場合、約 40 秒かかります。それは高すぎます:(日付がはるかに長い..
オプションは次のとおりです。
create
別のテーブルとinsert
select
、次にrename
limit を使用してクエリを複数回実行するforeign_id_1
次に実行する分割クエリforeign_id_2
- 選択を使用してから単一行で削除
より速い方法はありますか?
c - Cプログラミングファイルの読み取り/書き込み技術
ファイルの読み取りと書き込みを伴うプログラムを作成するのは初めてです。実際、私はこれを行うための最良のテクニックは何であるか疑問に思っています。私の仕事をクラスメートと比較したとき、私たちの論理は互いに非常に異なっているからです。
ご覧のとおり、先生から、ユーザーがレコードを追加、編集、削除できる簡単な生徒リストシステムを作成するように依頼されました。そして彼は、次にプログラムを使用するときにアクセスできるように、すべてのレコードを保存するためのファイルを作成するように要求しました。
この問題に対する私の解決策は、プログラムがメニューを開く前に、内部のすべてのレコードを読み取り、それをarray[]に保存することです。そうすることで、私はすべてのレコードを操作することができました。次に、ユーザーがプログラムを終了する前に、プログラムを同じファイルに保存し、その上のすべてのレコードを上書きします。
私のクラスメートの解決策はこのようなものです。彼女は、レコードを追加するときにファイルにアクセスしてデータを追加し、レコードを編集するときにファイルにアクセスして特定のレコードを編集し、レコードを削除するときにファイルにアクセスしてレコードを削除します。つまり、彼女が行ったことは、彼女が作成したすべての関数に対して、ファイルにアクセスしているということです。
もちろん、両方の作業をコーディングすることは可能です。しかし、数千または数百万のレコードを処理する場合、どちらを使用する方が効率的で効果的か疑問に思います。または、私たちが行ったよりも優れた他の解決策はありますか?たぶんあなたはあなたのファイル処理の経験を私たちと共有することができます...ありがとう。
wcf - WCFを介して大きなメッセージを送信できません
あらゆる種類のメッセージを送信するためにWCFを使用していますが、特にこのメッセージは約3200000バイトに加えて、いくつかの文字列とヘッダーです。ラージペイロードは、あらゆる面で模倣しようとした構成を持つ別のサービスを介してホストから取得されたシリアル化されたオブジェクトです。
パフォーマンスのためにnetTcpバインディングを使用しており、多くのコールバックを使用しています。クライアント側とサーバー側の両方で、見つけることができるすべてのオプションを最大レベルに設定しました。
クライアントで次の説明のないエラーメッセージが表示されます。
ソケット接続が中止されました。これは、メッセージの処理エラー、リモートホストによる受信タイムアウトの超過、または根本的なネットワークリソースの問題が原因である可能性があります。ローカルソケットのタイムアウトは「00:00:59.9979996」でした。
そして内面の脱出:
既存の接続がリモートホストによって強制的に閉じられました
トレースを実行すると、もう少し多くの情報が得られます(スタックトレースの最上位):
System.ServiceModel.Channels.SocketConnection.Write(Byte []バッファー、Int32オフセット、Int32サイズ、ブール値即時、TimeSpanタイムアウト)スタックトレースの最上位内部拡張:System.Net.Sockets.Socket.Send(Byte []バッファー、Int32オフセット、Int32サイズ、SocketFlags socketFlags)
スタックトレース内部例外の最上位:
System.Net.Sockets.Socket.Send(Byte []バッファー、Int32オフセット、Int32サイズ、SocketFlags socketFlags)
ペイロードをnullに設定した場合(3.2 MBのオブジェクトを送信しない場合)、メッセージは大騒ぎせずに通過します。
オブジェクトが別のサービスから発信されているという事実は、私の問題と関係がありますか?私の目には、問題はメッセージのサイズですが、構成のオプションを増やしても、これまでのところ役に立ちませんでした。
運が悪かったので、クライアントに設定しようとしました。ストリーミングを使用すると、リクエスト/レスポンスに切り替えたり、すべてのコールバックを削除したりします...
何か案は?
javascript - Ruby on Rails - 大規模なデータセットの保存とアクセス
Ruby on Rails アプリケーション内で大規模なデータセットのストレージとアクセスを管理するのに苦労しています。ここに私のアプリケーションを簡単に示します。道路網に関連するダイクストラのアルゴリズムを実行し、Google マップ API を使用して訪問するノードを表示しています。米国の道路網のオープン データセットを使用して、リンクで指定された 2 つの txt ファイルを反復処理してグラフを作成していますが、このデータをアプリに保存するのに問題があります。
このような大規模なデータセットは ActiveRecord オブジェクトではないという印象を受けています。このデータの内容を変更する必要はありません。むしろ、データにアクセスしてハッシュでローカルにキャッシュし、それに対して ruby メソッドを実行できます。私はいくつかのことを試しましたが、問題が発生しています。
txt ファイルを解析し、グラフを yml 形式で保存するのが最も理にかなっていると考えました。その後、グラフをシード データとして DB にロードし、Node.all などを使用してグラフを取得できます。残念ながら、yml ファイルが大きすぎて Rails が処理できなくなります。Rake を実行すると、システムは無限に 100% で実行されます...
次に考えたのは、データを変更する必要がないので、「初期化」の開始時にアプリケーションがロードされるたびにグラフを作成するだけでよいということです。しかし、このコードをどこに置くべきか正確にはわかりません。いくつかのメソッドを実行するか、少なくともデータのブロックを実行する必要があります。そして、すべてのコントローラー/メソッドでアクセスできるある種のグローバル/セッション変数に保存します。この大規模なデータセットを渡したくはありません。どこからでもアクセスできるようにするだけです。
これは私が現在行っている方法ですが、受け入れられません。コントローラー アクションでグラフを作成するテキスト ファイルを解析しており、サーバーがタイムアウトする前に計算できるようになることを期待しています。
理想的には、コンテンツ全体を取得してローカルで使用できるデータベースにグラフを保存します。または、少なくともアプリケーションのロード時にデータの解析が 1 回必要なだけで、その後、さまざまなページ ビューなどからアクセスできるようになります。これが最も効率的だと思いますが、一瞬。
何か案は?
database - 膨大なデータ セットを収集、維持、および正確性を確保するためのベスト プラクティスは何ですか?
システムの設計方法に関する実際的なアドバイスを求めて、この質問を投げかけています。
amazon.com や pandora などのサイトは、コア ビジネスを実行するために膨大なデータ セットを保持しています。たとえば、Amazon (および他のすべての主要な電子商取引サイト) には、何百万もの販売用の製品、それらの製品の画像、価格設定、仕様などがあります。
サードパーティの販売者から入ってくるデータとユーザーが生成したコンテンツを無視すると、その「もの」はどこかから来なければならず、誰かによって維持されます。また、非常に詳細で正確です。どのように?どうやってやっているの?データ入力の事務員が大勢いるだけですか、それとも単調な作業を処理するシステムを考案したのでしょうか?
私の会社も似たような状況です。私たちは、自動車部品とそれらが適合する車の膨大な (1,000 万件のレコード) カタログを維持しています。しばらくの間、カタログの成長と正確さを維持するための多くのプログラムとプロセスを考え出しました。ただし、チームをyに成長させるには、カタログをxアイテムに成長させる必要があるようです。
データ チームの効率を高める方法をいくつか考え出す必要があり、他のチームの作業から学べることを願っています。どんな提案でも大歓迎ですが、それ以上は、真剣に読むのに時間を費やすことができるコンテンツへのリンクです.
mysql - LOAD DATA INFILE を使用して大きなデータ ファイルをインポートしている間、MYSQL のパフォーマンスを維持するにはどうすればよいですか?
大規模なデータベース (一部のテーブルは 500000000 行以上) を使用しています。LOAD DATA INFILE を使用して、毎日 300 万から 1000 万行を置換する必要があり、各インポートは約 100 万行 (CRON では 1 日 3 から 10 回) です。問題は、このような大きなファイルのインポートを行っている間、MySQL が CPU の 80% を消費し、Web サイトから送信されるすべての一般的なクエリが非常に遅くなったり、Web サイトのパフォーマンスが低下したりすることです。サイトは、Amazon の EC2 Windows 2008 サーバーで実行されています。1 つの EC2 インスタンス内でこの問題を解決する方法を知っている人はいますか (データベースを分割せずに) ありがとう。
c - C でのメンバーシップ テストのための大きなリストの永続化
各項目は、17 個の 32 ビット整数の配列です。おそらく、120 ビットの一意のハッシュを生成できます。
私はこれらのアイテムを 9,731,643,264 個生成するアルゴリズムを持っており、そのうちのいくつが一意であるかを確認したいと考えています。これらの最大 36 分の 1 が一意であると推測しますが、確実ではありません。
このサイズでは、メモリ内でこれを実際に行うことはできません (ギグが 4 つしかないため)。そのため、これらのリストを保持し、メンバーシップ テストを行い、まだ存在しない場合は新しいものをそれぞれ追加する方法が必要です。
私は Linux の C(gcc) で作業しているので、ソリューションがそこから機能する場合は良いでしょう。
何か案は?