4

多数のキーバリュー ストアが利用可能です。現在、いずれかを選択して、それに固執する必要があります。キーバリュー ストア ベンダーによって作成されたものではない、独立したオープン API を使用すると、ストア間の切り替えがはるかに簡単になると思います。

したがって、誰かがアプリを一度構築し、必要に応じてキーと値のストアを変更できるように、データストアの抽象化レイヤー (ODBC に似ていますが、より単純なキーと値のストアに焦点を当てています) を構築しています。この API は単純すぎますか?

get(Key)
set(Key, Value)
exists(Key)
delete(Key)

これまで見てきたすべての API は非常に多くの機能を追加しているように見えるので、追加のメソッドがいくつ必要か疑問に思っていました。

set(null) を使用してアイテムを削除でき、get が null を返す場合、これはアイテムが存在しないことを意味するという返信を受け取りました。これは 2 つの理由で良くありません。第一に、戻り値の型とステータスを混在させるのはよくないことであり、第二に、すべての言語に null の概念があるわけではありません。見る:

すべてのプログラミング言語には、NIL、null、または未定義の明確な概念がありますか?

データに対してさまざまな種類の操作を実行できるようにしたいのですが、理解しているように、すべてをキー値ストアの上に構築できます。これは正しいです?また、これらの付加価値機能も提供する必要がありますか? 例: mapreduce やインデックスなど

内部的には、Erlang と Ruby で既にこの基本的なバージョンがあり、多くの時間を節約できました。また、さまざまなキー値ストアの特定のユース ケースのパフォーマンスをテストすることもできました。

4

9 に答える 9

6

絶対に必要なことだけを行い、単純すぎるかどうかを尋ねるのではなく、方法が 1 つしかない場合でも、多すぎるかどうかを尋ねます。

于 2010-02-23T20:59:15.063 に答える
4

キーの取得、設定、および削除だけを行っている場合は、これで問題ありません。

于 2010-02-23T20:57:27.680 に答える
4

あなたの API には、「hasKey」や「clear」などの便利な関数がいくつかありません。たとえば、Python のハック ( http://docs.python.org/tutorial/datastructures.html#dictionaries ) を見て、追加の機能を選択してください。

誰もが「シンプル イズ グッド」と言っていますが、それは「シンプルはシンプルすぎる」まで真実です。

于 2010-02-23T21:03:55.223 に答える
3

API に「単純すぎる」ということはありません。シンプルなほど良い!そのままでニーズが解決する場合は、そのままにしておきます。

于 2010-02-23T20:59:52.813 に答える
3

deleteメソッドは不要です。に渡すだけnullですset

追加するために編集:

冗談です!私は削除を続け、おそらくCount、Contains、そしておそらく列挙子(または2つ)を追加します。

于 2010-02-23T21:01:07.693 に答える
2

私はインターフェースを最小限に簡素化することに賛成ですが、システムの要件についての詳細がなければ、このインターフェースで十分かどうかを判断するのは困難です。確かに十分に簡潔に見えます。

上記の API 定義を読んでも明確ではないため、 「存在しないキー」のセマンティクスを文書化することを忘れないでください。更新: メソッドを追加したようですexists: これは必要ですか? メソッドを使用して、何らかの種類のgeta を定義できますよね?NIL

考えてみる価値はあるかもしれませんが、値の「鮮度」について考えてみてはどうでしょうか。つまり、関連付けられた「最終変更」タイムスタンプ? もちろん、システム要件によって異なります。

アクセス制御はどうですか?API定義の範囲内ですか?

キーを繰り返し処理するのはどうですか?セットが大きくなる可能性がある場合は、いくつかのページネーションセマンティクスを含めることができます。

于 2010-02-23T21:03:13.933 に答える
2

API を作成するときは、自分の API がユーザーに何を提供するのかを自問する必要があります。API が非常に単純化されているため、クライアントが独自のアプリをより速く簡単に作成できる場合、その API は失敗しています。自問してみてください、私の機能は彼らに特定の利益をもたらしますか?答えが「いいえ」の場合、それは単純すぎて一般的です。

于 2010-02-23T21:13:59.990 に答える
1

前述のように、単純であればあるほど良いのですが、単純なイテレータまたはキー リスト メソッドを使用することもできます。私は常にセットを反復処理する必要があります。イテレータによって処理されない場合は、「size()」メソッドも。ただし、それは明らかにあなたの使用法に依存します。

于 2010-02-23T21:05:16.370 に答える
0

シンプルすぎず、美しいです。"exists(key)" が "get(Key) != null" の便利な省略表現である場合は、削除することを検討してください。get() の値がどれだけ大きいか複雑かによると思います。

于 2010-02-23T21:14:54.197 に答える