独自のAPIに最適なデータ構造


10

Stack Exchangeネットワーク用のEmacsメジャーモードを作成する初期段階です。Emacsを定期的に使用している場合、これは最終的にあなたに利益をもたらします。

Stack ExchangeのAPI (1日あたりIPあたり10000を上限とするへの呼び出し数を最小限に抑え、一般的に責任のある市民になるために、ネットワークから受信した情報をキャッシュしてメモリに保存し、再びアクセスされます。この情報を格納するためのデータ構造について、私は本当に行き詰っています。

明らかに、これはリストになります。ただし、他のデータ構造と同様に、どのデータが格納され、どのようにアクセスされるかによって、選択を決定する必要があります。何、このようなすべての情報をなどの単一の記号に格納できるようにしたいのstack-api/cacheですが。だから、さらなるstack-api/cache騒ぎなしで、最後の更新によってキー付けされたconsesのリストです:

`(<csite> <csite> <csite>)

どこに<csite>なるでしょう

(1362501715 . <site>)

この時点では、単純な関連リストを定義するだけです。もちろん、もっと深く行く必要があります

それぞれ<site>がAPIパラメータ(一意)のリストであり、その後に質問のリストが続きます。

`("codereview" <cquestion> <cquestion> <cquestion>)

それぞれ<cquestion>が、あなたが推測したとおり、最後の更新時間に関する質問の短所です。

`(1362501715 <question>) (1362501720 . <question>)

<question>question構造と回答のリストの短所です(ここでも、最終更新時間と見なされます)。

`(<question-structure> <canswer> <canswer> <canswer>

そして `

`(1362501715 . <answer-structure>)

Emacs Lispの(すべてのLispと大差ないが、あなたは知っていると愛このデータ構造は、おそらく最も正確ツリーとして説明しているが、言語を考慮し、これを行うには良い方法があるかどうかはわからないまったく) 。明示的なconsはおそらく不要ですが、それは私の脳がそれをよりよく包み込むのに役立ちます。<csite>たとえば、が次のようになるだけだと確信しています

(<epoch-time> <api-param> <cquestion> <cquestion> ...)

懸念事項:

  • このような潜在的に巨大な構造にデータを保存すると、システムのパフォーマンスが低下しますか?無関係なデータを保存しないようにしたいのですが、できる限りのことは行いましたが、データセットはそもそも(通常の使用のために)それほど大きくはないと思います。(私はリストの先頭にある時間を使用して古いデータをカリングすることを計画しています;それぞれはその子から最終更新時間を継承し、ツリーから継承します。このカリングが行われるべき範囲:私は承知しました。)
  • このようなデータの保存には、データを使用する必要があるものとパフォーマンス上のトレードオフがありますか?つまり、セットとリトリーブ操作はリストのサイズの影響を受けますか?

より良い構造がどのように見えるかについて他に提案はありますか?


私は本当にこのモードが欲しいので、これを+1しています
Daniel

@jozefg私も本当にそれが欲しいです。このインターンシップは私の時間のほとんどを吸い尽くしてきましたが、学校が始まったら、もう少し進歩する必要があります
Sean Allred 2013

Emacsを使用してテキストボックスの内容を入力できるブラウザプラグインをインストールするだけで、とても満足しています。EmacsにWikiのマークアップを理解させ、フォーマットされたテキストを表示させますか?
kevin cline 2013

@kevinclineいいえ、アイデアは実用的なタスクのみを実行するというものです。ローカルの質問のアーカイブ。高度なコード編集(と同様に、適切なメジャーモードに移行org)。<!-- language: blah>必要に応じて挿入(コード編集が行われたモードに応じて); そのようなもの。詳細はGitHubの上のREADMEを参照してください、と感じるほとんどの機能を提案することを歓迎。これについて事前に知っているほど、設計が改善されます。 emacsのキーバインドは言うまでもなく編集 ;)
Sean Allred 2013

回答:


1

Emacs lispはデータ処理用に最適化されていません。エンジンにはCommon Lispを使用し、プレゼンテーションのみにEmacsを使用する方が有利な場合があります。

Emacs Lispを使用することにした場合でもeieio、リストの代わりに構造化データ()を使用し、リストの代わりにハッシュテーブルを使用することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.