0

key_name データストアにエンティティがあり、そのプロパティの組み合わせから派生した一意のエンティティを持つことができると仮定します。

例:

class Render(db.Model):

    #Math props
    x_size = db.IntegerProperty()
    y_size = db.IntegerProperty()
    center_axis_x = db.FloatProperty()
    center_axis_y = db.FloatProperty()
    center_axis_z = db.FloatProperty()
    iterations = db.IntegerProperty()

まったく同じプロパティを持つエンティティは他にないと確信しているので、これまでに使用した一意のキーを作成するには、次のようにします。

render_key=hashlib.md5(str(properties.x_size) +
                                str(properties.y_size) +
                                str(properties.iterations) +
                                str(properties.center_axis_x) +
                                str(properties.center_axis_y) +
                                str(properties.center_axis_z)
                                ).hexdigest()

hexdigestを使用すると、キーをURLセーフでユーザーフレンドリーにできますが、それについても話し合う必要があると思います。

だから質問に。上記のシナリオまたはその変更されたバージョンで、同じ結果を達成するための他のより良い方法はありますか?下位互換性がある必要はありません。したがって、最終的なキーが私のメソッドによって生成されたものと異なっていても、問題はありません。

ありがとう

4

1 に答える 1

1

md5が衝突を起こさないことを保証しないことを除いて、全体的にあなたの計画は良いです(それは非常にありそうもないですが)。代わりにSHA-256を使用することで、衝突の可能性をさらに低くすることができます。または、ハッシュしないでください。

衝突が発生し、間違ったエンティティを上書きするという非常にまれなケースで問題がないかどうかによって異なります。

于 2012-12-29T16:22:11.870 に答える