2013-05-20 4 views
2

https://developers.google.com/datastore/docs/overviewORM для Google Cloud датастора

Похож датастором в GAE, но без ОРМА (объектное отношение модели). Могу ли я использовать ту же модель ORM, что и хранилище данных для GAE для облачного хранилища данных? или Есть ли поддержка ORM для Cloud Datastore?

+0

Не ОРМ, но это может быть полезно: https://github.com/transceptor-technology/dbWrapper –

+0

https://github.com/lucemia/google-cloud-datastore-orm ОРМ подход – lucemia

ответ

3

Google Cloud Datastore обеспечивает только низкоуровневый API (proto и json) для отправки в хранилище данных RPC.

NDB и подобные библиотеки более высокого уровня могут быть адаптированы для использования более низкого уровня обертку, как googledatastore (reference) вместо google.appengine.datastore.datastore_rpc

+0

Спасибо, Есть ли для этого проект? (Я не возражаю, если мне нужно создать его самостоятельно, я просто хочу знать, прежде чем начать :) – lucemia

+0

@lucemia не знаю, о чем я знаю. – proppy

+1

@lucemia вы также можете рассмотреть возможность внесения изменений непосредственно в ndb: https://code.google.com/p/appengine-ndb-experiment/wiki/Contributing – proppy

0

Да. Вы можете не только использовать одни и те же модели ORM, Google Cloud Datastore позволяет читать и записывать данные из текущего хранилища приложений App Engine.

https://developers.google.com/datastore/docs/activate?hl=en#google_cloud_datastore_for_an_existing_app_engine_application

+0

пожалуйста поставщик более Детали. Я только видел инструкцию о подключении облачного хранилища данных к движку приложения. Ничего о ORM. – lucemia

+0

ORM, как в функциях, таких как слой ndb? –

+0

Да, такой слой, как db или ndb, я ищу. – lucemia

4

хранилища данных App Engine API, высокого уровня, как первой партии (дБ, ОПРС) и третьей стороной (объективировать, slim3), построены на вершине API, низкого уровня:

Замена некоторых версий этих интерфейсов/классов App Engine на использование API Google Cloud Datastore позволит вам использовать эти API высокого уровня за пределами App Engine.

Значок API самого высокого уровня не должен меняться (много).

3

Для разработчиков .NET я только что создал pogo, который является .NET ORM, который поддерживает сохранение POCO в Google Cloud Datastore и запросы к ним с помощью LINQ.

Он доступен на NuGet, называется «пого», и источник размещается здесь - http://code.thecodeprose.com/pogo

Например, вот вставка и поиск:

var unique = Guid.NewGuid().ToString(); 

var poco = new TestDepartment 
{ 
    Id = unique, 
    Code = 123, 
    Director = new TestEmployee { FirstName = "Boss" } 
}; 

using (var session = _datastore.OpenSession()) 
{ 
    session.Store(poco); 
    session.SaveChanges(); 
    var lookupPoco = session.Load<TestDepartment>(unique).SingleOrDefault(); 

    Assert.AreEqual("Boss", lookupPoco.Director.FirstName); 
} 

и вот вопрос:

using (var session = _datastore.OpenSession()) 
{ 
    var results = session.Query<TestEmployee>() 
      .Where(t => t.HourlyRate > 50.0) 
      .ToList(); 

    Assert.IsTrue(results.Count > 0); 
} 
1

Это не точный ответ, и мы уже знаем, что Google работает для NDB Library, я не мог дождаться этого.

Что я пытался написать NDB Properties, не указанную в datastore_v1_pb2.py, например GeoPt.

class GCDFoo(ndb.Model): 
    latlng = ndb.GeoPtProperty() 

В этом случае, если мы читаем объект по API низкого уровня GCD, возвращается, как показано ниже.

name: "latlng" 
value { 
    entity_value { 
    property { 
     name: "x" 
     value { 
     double_value: 10.0 
     indexed: false 
     } 
    } 
    property { 
     name: "y" 
     value { 
     double_value: 10.0 
     indexed: false 
     } 
    } 
    } 
    meaning: 9 
} 

hm, Я действительно не знаю, что означает «значение», но было важно описать GeoPt. и теперь мы можем написать свойство GeoPt что-то вроде этого.

def make_geopt_value(lat,lng): 
    entity = datastore.Entity() 
    prop = entity.property.add() 
    datastore.helper.set_property(prop,'x',lng,indexed=False) 
    prop = entity.property.add() 
    datastore.helper.set_property(prop,'y',lat,indexed=False) 
    value = datastore.Value() 
    datastore.helper.set_value(value,entity) 
    value.meaning = 9 
    return value 

Это сработало для меня, но пока не знаю, правильно ли он подходит. В любом случае, я надеюсь, что мой ответ будет полезен для тех, кто не может ждать Библиотеку NDB.

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