4

クライアントとサービスの間で大きな辞書/マップを共有しようとしています。毎回マップ全体をやり取りすることなく、双方向に値を設定し、ディクショナリ/マップから値を削除できる必要があります。

以下を使用してマップを作成できることを知っています。

map<string, CustomType> cells = 3;

( protobuf3 マップのドキュメント)

ここのいずれかを使用する提案が表示されます: https://github.com/google/protobuf/issues/1606

ただし、そのバグ レポートで提案されている構文は、私には意味がありません。

message Test1 {
 oneof a_oneof {
  int32 a = 1;
 }
}

それをどのようにテストしますか?どのようにNoneを保存しますか?

私は次のようなものを作成しようとします:

message None{}
message MaybeCustomType{
 oneof maybe{
   CustomType just = 1;
   None       none = 2;
 }
}

しかし、これがエレガントで正しい解決策であるとはまったく確信していません。

また、スキーマを完全に変更して実行することも検討しました。

map<string, CustomType> cells = 1;
repeated string deleted_cells = 2;

ただし、未定義のケースが作成されるため、そのソリューションは好きではありません。「foo」という名前のセルが「cells」マップと「deleted_cells」マップの両方にある場合はどうなりますか? さらに、計算からデータを抽象化します。セルを変更し、潜在的にセルを削除することを決定する関数にセルを渡すことができるようにしたいので、セルの削除に関する情報がセル自体の近くに保存されるのは当然のことです。

4

1 に答える 1