2

У меня есть база данных с обычным размером (~ 100 МБ), которую я хочу наложить на движок Google. Я мог бы помещать его в хранилище данных, но хранилище данных довольно медленное, не имеет реляционных особенностей и имеет множество других неудобных ограничений (не вдаваясь в них здесь). Другой вариант - загрузить все данные в память, но я быстро попал в квоту, введенную Google. Конечным вариантом является использование django-nonrel + djangoappengine, но я боюсь, что пакет все еще находится в зачаточном состоянии.Реляционная база данных только для чтения в Google App Engine?

В идеале я хотел бы создать базу данных sqlite для чтения, которая использует источник blobstore в качестве источника данных. Это возможно?

+3

Какую проблему вы пытаетесь решить? для чего нужна база данных? если он доступен только для чтения, почему вы не можете преобразовать данные в автономное состояние в автономном режиме? Если это всего 100 мб, вы можете денормализовать его 10 различных способов поддержки различных запросов. –

+0

Предположим, что я могу отправить его в другое состояние в автономном режиме, и что? Я загружаю его как blobstore и выполняю поиск вручную? Или я храню его в хранилище данных? Кроме того, если бы я должен был денормализовать все, данные легко перерасти в диапазон с несколькими гигабайтами. Например, я использую собственную версию геомодели для поддержки поиска местоположения. Денормализация только данных о местоположении приведет к ее разрастанию. – speedplane

ответ

2

Я не думаю, что вы, вероятно, найдете что-нибудь подобное ... наверняка, не над блобстором. Потому что, если все ваши данные хранятся в одном блоке, вам нужно будет прочитать всю базу данных в памяти для любой операции, и вы сказали, что не можете этого сделать.

Использование хранилища данных в качестве вашего бэкэнда более правдоподобно, но не много. Большая проблема с предоставлением драйвера SQLite будет заключаться в реализации семантики транзакций, и поскольку это ключевая вещь, которую GAE отнимает у вас из-за высокой доступности, трудно себе представить, что кто-то сильно затруднит написать такую ​​вещь.

+1

Вам не нужно загружать весь блокнот. Механизм приложений обеспечивает произвольный доступ к блочному магазину, подобно случайному доступу к файлам. Кроме того, это база данных только для чтения. Я не думаю, что мне понадобятся транзакции. – speedplane

1

Хотя доступ к объектам Blobstore можно использовать с помощью класса BlobReader в качестве файловых объектов, возможно, еще хуже, если хранилище данных попытается выполнить операции реляционной базы данных в таком файле без загрузки всего файла в первую очередь.

+0

Я думаю, что, возможно, с умным кэшированием в памяти это может быть осуществимо. – speedplane

2

django-nonrel не магически предоставляет базу данных SQL - так что это не решение вашей проблемы.

Доступ к blobstore blob как файл возможен, но для модуля SQLite требуется собственное расширение C, которое не включено в App Engine.

Смежные вопросы