Google app engine 在大表中,在子(子)集合中设置键值是否正常?

Google app engine 在大表中,在子(子)集合中设置键值是否正常?,google-app-engine,bigtable,document-database,Google App Engine,Bigtable,Document Database,我用的是谷歌应用引擎,所以是大桌子 我有一个人实体,看起来像这样: { // This property would be encoded into JSON and saved un-indexed as db.Text() phone_numbers: { 'hHklams8akjJkaJSL': // <-- Should I key this object? { number:'555-555-5555

我用的是谷歌应用引擎,所以是大桌子

我有一个
实体,看起来像这样:

{
    // This property would be encoded into JSON and saved un-indexed as db.Text()
    phone_numbers:
    {
        'hHklams8akjJkaJSL': // <-- Should I key this object?
        {
            number:'555-555-5555',
            type:'mobile', 
        },
        etc...
    },
    // This property is an array of strings.  
    // It is searchable so that a query could be run to find all 
    //   people with a particular phone number: 
    //   "SELECT * FROM person WHERE phone_number_search_property =      
    //     '5555555555'"
    phone_number_search_property:['5555555555','other phone numbers...'],

    first_name:'...',
    etc...
}
{
//此属性将被编码为JSON,并保存为db.Text()而未编制索引
电话号码:
{
“hhklams8akjkajsl”:/
  • 如果数据对象实际上只是另一个对象的一部分,并且在没有“父”对象的情况下永远不会被访问(电话号码和人员就是这样),那么IMHO可以序列化它并将其存储在“父”对象中。因此,您所做的是可以的

  • 您可以按电话号码搜索人员,因此使用(标准化)电话号码搜索其他财产的解决方案是可行的。如果您需要搜索其他财产,则它将不起作用(例如,将搜索限制为仅使用手机号码)

  • 为什么要用散列字符串(我假设您是通过
    UUID.fromString(string)
    生成的)为序列化的电话号码输入密钥?只需使用(规范化的)电话号码,它是唯一的


  • 嘿,Peter,我使用UUID键入是因为我试图养成不键入数据本身的习惯。有时我认为是唯一的信息结果并非如此。在这种情况下,我必须键入电话号码和分机号码,而不仅仅是电话号码。如果有人想键入电话号码,这可能会导致问题r这是公司的一条主线,然后在描述中写道:“询问卡罗尔”。如果有人输入了错误的号码,然后进行了更正,则该项目将不得不重新键入。