GAE - Как жить без соединений?

Инициализировать UIDatePicker.

var birthPicker = UIDatePicker()

// добавить цель на BirthPicker для получения даты.

 override func viewDidLoad() {
    super.viewDidLoad()
    self.birthPicker.datePickerMode = UIDatePickerMode.date
    self.birthPicker.addTarget(self, action: #selector(handleDatePicker), for: UIControlEvents.valueChanged)
}

// Получить дату из UIDatePicker при прокрутке.

 @objc func handleDatePicker(sender: UIDatePicker) {

    let timeFormatter = DateFormatter()
    timeFormatter.dateStyle = .long

    birthDateField.text = timeFormatter.string(from: sender.date)
}
13
задан David Underhill 21 July 2010 в 19:33
поделиться

4 ответа

Эта тема рассматривается в разговоре Google io: http://code.google.com/events/io/sessions/BuildingScalableComplexApps.html

В основном команда Google предлагает использовать свойства списка и то, что они называют объектами реляционного индекса, пример приложения можно найти здесь: http://pubsub-test.appspot.com/

7
ответ дан 1 December 2019 в 22:40
поделиться

"Загрузите пользователя, цикл через список друзей и загрузите их последние сообщения в блоге".

Это - весь, соединение - вложенные циклы. Некоторые виды соединений являются циклами с поисками. Большинство поисков является просто циклами; некоторые - хеши.

"Наконец объедините все сообщения в блоге для нахождения последних 10 записей в блоге"

Это - ORDER BY с ПРЕДЕЛОМ. Это - то, что база данных делает для Вас.

Я не уверен, что не масштабируемо об этом; это - то, что база данных делает так или иначе.

1
ответ дан 1 December 2019 в 22:40
поделиться

Если Вы посмотрите на то, как решение SQL, которое Вы предоставили, будет выполняться, оно пойдет в основном как это:

  1. Выберите список друзей для текущего пользователя
  2. Для каждого пользователя в списке запустите индексное сканирование по недавним сообщениям
  3. Слияние все сканирования от шага 2, останавливаясь, когда Вы получили достаточно записей

Можно выполнить точно ту же процедуру сами в Механизме Приложения, при помощи экземпляров Запроса как итераторы и выполнение слияния по ним.

Вы правы, что это не масштабируется хорошо к большим количествам друзей, но это страдает от точно тех же проблем, которые имеет реализация SQL, это просто не маскирует их также: Выборка последних 20 (например), затраты на записи примерно O (n регистрируют n), работа, где n является числом друзей.

13
ответ дан 1 December 2019 в 22:40
поделиться

Вот пример на python, взятый из http://pubsub-test.appspot.com/ :

У кого-нибудь есть такой для java? Спасибо.

from google.appengine.ext import webapp

from google.appengine.ext import db

class Message(db.Model):
 body = db.TextProperty(required=True)
 sender = db.StringProperty(required=True)
 receiver_id = db.ListProperty(int)

class SlimMessage(db.Model):
 body = db.TextProperty(required=True)
 sender = db.StringProperty(required=True)

class MessageIndex(db.Model):  
 receiver_id = db.ListProperty(int)

class MainHandler(webapp.RequestHandler):

 def get(self):
  receiver_id = int(self.request.get('receiver_id', '1'))
  key_only = self.request.get('key_only').lower() == 'on'
  if receiver_id:
    if key_only:
      keys = db.GqlQuery(
          'SELECT __key__ FROM MessageIndex WHERE receiver_id = :1',
          receiver_id).fetch(10)
      messages.extend(db.get([k.parent() for k in keys]))
    else:
      messages.extend(Message.gql('WHERE receiver_id = :1',
                      receiver_id).fetch(10))
0
ответ дан 1 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

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