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> ...)
懸念事項:
- このような潜在的に巨大な構造にデータを保存すると、システムのパフォーマンスが低下しますか?無関係なデータを保存しないようにしたいのですが、できる限りのことは行いましたが、データセットはそもそも(通常の使用のために)それほど大きくはないと思います。(私はリストの先頭にある時間を使用して古いデータをカリングすることを計画しています;それぞれはその子から最終更新時間を継承し、ツリーから継承します。このカリングが行われるべき範囲:私は承知しました。)
- このようなデータの保存には、データを使用する必要があるものとパフォーマンス上のトレードオフがありますか?つまり、セットとリトリーブ操作はリストのサイズの影響を受けますか?
より良い構造がどのように見えるかについて他に提案はありますか?
org
)。<!-- language: blah>
必要に応じて挿入(コード編集が行われたモードに応じて); そのようなもの。詳細はGitHubの上のREADMEを参照してください、と感じるほとんどの機能を提案することを歓迎。これについて事前に知っているほど、設計が改善されます。 emacsのキーバインドは言うまでもなく編集 ;)