3

データ取得システムから収集されたデータをメモリ内の場所に書き込んでから、データに対して非同期でさらに処理を実行するか、オフライン処理のためにファイルに書き出そうとしています。このアーキテクチャをこのようにして、データの取得をデータの分析と転送から分離し、将来の拡張と改善のための柔軟性を確保しようとしていますが、単純にデータを直接ファイルに書き込むよりも明らかに複雑です。

ここに私が書いたいくつかの探索的コードがあります。

#io.BufferedRWPair test
from io import BufferedRWPair

# Samples of instrumentation data to be stored in RAM
test0 = {'Wed Aug  1 16:48:51 2012': ['20.0000', '0.0000', '13.5', '75.62', '8190',
                    '1640', '240', '-13', '79.40']}
test1 = {'Wed Aug  1 17:06:48 2012': ['20.0000', '0.0000', '13.5', '75.62', '8190',
             '1640', '240', '-13', '79.40']}

# Attempt to create a RAM-resident object into which to read the data.
data = BufferedRWPair(' ', ' ', buffer_size=1024)

data.write(test0)
data.write(test1)

print data.getvalue()

data.close()

ここにはいくつかの問題があります (おそらくもっと!):

-> 'data' は、私が組み立てようとしている構造 (Python の外部) をピックアップする変数名です。これは、配列のような構造であり、各レコードにはいくつかのプロセス データ測定値が含まれている連続したレコードを保持する必要があります。検索のキーとして使用できるタイムスタンプによって。コードが曖昧すぎて本当の質問を反映できない場合に備えて、これを設計意図の背景として提供しました。

-> 「データ」オブジェクトが作成されていないため、このコードは機能しません。後で埋めるために空のバッファを開こうとしていますが、Python は 2 つのオブジェクトを探しています。1 つは読み取り可能、もう 1 つは書き込み可能で、コードには存在しません。このため、正しい構成を使用しているかどうかさえわかりません。これにより、次のような疑問が生じます。

  1. io.BufferedRWPair は、このデータを処理する最良の方法ですか? 私はPython 2.7.2を使用しているので、StringIOを試しましたが、うまくいきませんでした。タイムスタンプキーを持つレコードのアイデアが好きなので、dict 構造を選択しましたが、代替案を検討したいと思います。代わりに見るべき他のioクラスはありますか?

  2. 私が調べた代替案の 1 つは、NumPy/SciPy/Pandas の世界で定義されている DataFrame コンストラクトです。面白そうですが、追加のモジュールがたくさん必要なように見えるので、私はそれを避けてきました。私はこれらのモジュールの経験がありません - 必要なものを得るために、これらのより複雑なモジュールを検討する必要がありますか?

皆さん、提案やフィードバックを歓迎します...この質問をチェックしてくれてありがとう!

4

2 に答える 2

3

あなたが何を求めているのか理解できれば、インメモリ sqlite データベースを使用するのがよいでしょう。Sqlite を使用すると、完全に機能する SQL データベースを完全にメモリ内に作成できます。読み取りと書き込みの代わりに、選択と挿入を行います。

于 2012-08-03T23:33:53.820 に答える
0

データが収まる間データをメモリに保持し、必要な場合にのみファイルに書き込むメカニズムを作成することは冗長です。オペレーティングシステムがとにかくこれを行います。通常のファイルを使用してアプリケーションのさまざまな部分からアクセスする場合、オペレーティングシステムは、十分なメモリが利用可能である限り、ファイルの内容をディスクキャッシュに保持します。

メモリアドレスでファイルにアクセスしたい場合は、mmapモジュールを使用してファイルをメモリマップできます。ただし、私の印象では、必要なのは標準データベース、またはshelve任意のanydbmモジュールなど、Python標準ライブラリによって提供されるより単純な代替手段の1つだけです。

コメントに基づいて、RedisやのようなKey-Valueストアもチェックしてくださいmemcached

于 2012-08-05T16:55:46.293 に答える