Как делают Вас модели данных проектирования для Bigtable/Datastore (GAE)?

Для этого вам нужно FrameworkTemplate.FindName Method (String, FrameworkElement) :

private childItem FindVisualChild(DependencyObject obj)
where childItem : DependencyObject
{
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(obj, i);
            if (child != null && child is childItem)
                return (childItem)child;
            else
            {
                childItem childOfChild = FindVisualChild(child);
                if (childOfChild != null)
                    return childOfChild;
            }
        }
        return null;
}

Затем:

for (int i = 0; i < Game_ScrollViewer_online.Items.Count; i++)
{
     ListBoxItem GameListBoxItem = (ListBoxItem)(Game_ScrollViewer_online.ItemContainerGenerator.ContainerFromIndex(i));
     ContentPresenter contentPresenter = FindVisualChild(GameListBoxItem);
     DataTemplate myDataTemplate = contentPresenter.ContentTemplate;
     Button tempBut = (Button) myDataTemplate.FindName("Current_game_button", contentPresenter);
     //Do stuff with button
}

Для решения проблемы с отсутствующим FindName используйте FindDescendant вот так:

public T FindDescendant(DependencyObject obj) where T : DependencyObject
{
    if (obj is T)
        return obj as T;

    int childrenCount = VisualTreeHelper.GetChildrenCount(obj);
    if (childrenCount < 1)
        return null;

    for (int i = 0; i < childrenCount; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(obj, i);
        if (child is T)
            return child as T;
    }

    for (int i = 0; i < childrenCount; i++)
    {
        DependencyObject child = FindDescendant(VisualTreeHelper.GetChild(obj, i));
        if (child != null && child is T)
            return child as T;
    }

    return null;
}

18
задан Eddie 28 February 2009 в 14:05
поделиться

3 ответа

Разработка bigtable схемы является открытым процессом и в основном требует, чтобы Вы думали о:

  • Схемы доступа, которые Вы будете использовать и как часто каждый будет использоваться
  • Отношения между Вашими типами
  • В каких индексах Вы испытываете необходимость
  • Шаблоны записи, которые Вы будете использовать (для эффективного распределения нагрузки),

Хранилище данных GAE автоматически денормализовывает Ваши данные. Таким образом, каждый индекс содержит (главным образом) полную копию данных, и таким образом каждый индекс значительно добавляет ко времени, потраченному для выполнения записи и используемого пространства памяти.

Если бы это не имело место, то разрабатывание схемы Хранилища данных было бы намного большим количеством работы: необходимо было бы думать тщательно о первичном ключе для каждого типа и рассмотреть эффект решения о местности данных. Например, при рендеринге сообщения в блоге необходимо было бы, вероятно, отобразить комментарии для соглашений с ним, таким образом, ключ каждого комментария, вероятно, начнется с ключа связанного сообщения.

С Хранилищем данных это не такое грандиозное предприятие: запрос, который Вы используете, посмотрит что-то как "Выбор * ИЗ Комментария ГДЕ post_id = N." (Если бы Вы хотите разбить на страницы комментарии, у Вас также были бы предельный пункт и возможный суффикс "И comment_id> last_comment_id".), После того как Вы добавляете такой запрос, Хранилище данных создаст индекс для Вас, и Ваши чтения будут волшебно быстры.

Что-то для учета - то, что каждый дополнительный индекс создает некоторую дополнительную стоимость: лучше, если можно использовать как можно меньше схем доступа, так как это сократит количество индексов, которые GAE создаст, и таким образом общее устройство хранения данных, требуемое данными.

Перечитывая по этому ответу, я нахожу его немного неопределенным. Возможно, практический вопрос о дизайне помог бы определить объем этого вниз?:-)

19
ответ дан 30 November 2019 в 09:07
поделиться

Можно использовать www.web2py.com. Вы создаете модель и приложение однажды, и это работает над GAE, но также и witl SQLite, MySQL, Posgres, Oracle, MSSQL, FireBird

1
ответ дан 30 November 2019 в 09:07
поделиться

Поскольку GAE основывается, как данными управляют в Django существует много информации о том, как рассмотреть подобные вопросы в документации Django (например, видят здесь, прокручивают вниз к 'Вашей первой модели').

Короче говоря Вы разрабатываете Вас модель дб как регулярная объектная модель и позволяете GAE разобраться во всех объектно-реляционных отображениях.

-2
ответ дан 30 November 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: