Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Appengine顶部的键值_Java_Google App Engine_Datanucleus - Fatal编程技术网

Java Appengine顶部的键值

Java Appengine顶部的键值,java,google-app-engine,datanucleus,Java,Google App Engine,Datanucleus,尽管appengine已经没有模式,但仍然需要通过Datanucleus持久层定义需要存储到数据存储中的实体。所以我在想一个方法来解决这个问题;通过拥有一个在运行时存储键值的层,而不是编译时实体 使用Redis完成此操作的方法是创建如下键: private static final String USER_ID_FORMAT = "user:id:%s"; private static final String USER_NAME_FORMAT = "user:name:%s"; 文档中的Re

尽管appengine已经没有模式,但仍然需要通过
Datanucleus
持久层定义需要存储到
数据存储中的实体。所以我在想一个方法来解决这个问题;通过拥有一个在运行时存储键值的层,而不是编译时实体

使用Redis完成此操作的方法是创建如下键:

private static final String USER_ID_FORMAT = "user:id:%s";
private static final String USER_NAME_FORMAT = "user:name:%s";
文档中的Redis类型有:
字符串
链表
集合
排序集合
。我不确定是否还有更多

至于GAE数据存储,字符串“Key”和“Value”必须是要存储的实体

比如:

此方案的合理性源于对数据存储的Restful访问(由Datanucleus api rest提供)

使用此rest api,要持久化对象或实体:

POST http://datanucleus.appspot.com/dn/guestbook.Greeting
{"author":null,
  "class":"guestbook.Greeting",
  "content":"test insert",
  "date":1239213923232}
这种方法的问题在于,为了持久化实体,需要在编译时定义实际的类;与使用键值存储机制不同,我们可以简化方法调用:

POST http://datanucleus.appspot.com/dn/org.myframework.KeyValue
{ "class":"org.myframework.KeyValue"
  "key":"user:id:johnsmith;followers",
  "value":"the_list",
}

将单个字符串作为“值”传递相当简单,我可以使用JSON数组来表示列表、集合或排序列表。真正的问题是如何实际持久化传递到接口中的不同类型的数据。是否应该有多个KeyValue实体,每个实体代表它支持的基本类型:KeyValueString?关键价值清单?等等。

看起来您正在使用基于JSON的REST API,那么为什么不将值存储为JSON字符串呢?

看起来您正在使用基于JSON的REST API,那么为什么不将值存储为JSON字符串呢?

您不需要使用Datanucleus层或任何其他精细ORM层(如Twig或Objectify)。这些都是可选的,并且都基于低级API。如果我正确地解释了你所说的话,也许它已经具备了你想要的功能。请参阅:

您不需要使用Datanucleus层或任何其他精细ORM层(如Twig或Objectify)。这些都是可选的,并且都基于低级API。如果我正确地解释了你所说的话,也许它已经具备了你想要的功能。请参阅:

Datanucleus是运行在GAE之上的特定框架。但是,您可以在一个更低、结构更少、更像键/值的级别(低级API)访问数据库。这是您可以直接访问的最低级别。 顺便说一句,低级“GAE数据存储”内部运行在6个全局Google Megastore表上,这些表又托管在Google大表数据库系统上。
将JSON保存为字符串很好。但您需要一种方法来检索对象,而不是通过ID。也就是说,您需要一种方法来索引数据,以支持对其进行任何类型的有用查询。

Datanucleus是一种运行在GAE之上的特定框架。但是,您可以在一个更低、结构更少、更像键/值的级别(低级API)访问数据库。这是您可以直接访问的最低级别。 顺便说一句,低级“GAE数据存储”内部运行在6个全局Google Megastore表上,这些表又托管在Google大表数据库系统上。
将JSON保存为字符串很好。但是您需要一种方法来检索对象,而不是通过ID。也就是说,您需要一种方法来索引数据,以支持对其进行任何类型的有用查询。

您试图解决的问题是什么?(我得到了“无编译时定义”,但q是为什么不?您的用例是什么?@alphazero是的,很好。然而,我希望利用GAE,同时具有持久化“任何类型数据”的灵活性,我认为这非常适合Restful web服务。我是说,我可以输入值并在任何时间点检索它们。@alphazero只需执行POST,我就可以存储键值,通过使用GET方法,我可以查询一个值,如:GET http://localhost/dn/org.myframework.KeyValue?key=='user:id:johnsmith',这将返回例如json对象。不知何故,我认为这会使持久化数据变得更容易弹性好,疼痛小。我认为这个项目更像是一个开源项目,我需要尽快开始,@alphazero根据你的问题,我相信这个用例将用于web服务。让web服务能够轻松持久化数据,而无需预先定义后端持久化层。您试图解决的问题是什么?(我得到了“无编译时定义”,但q是为什么不?您的用例是什么?@alphazero是的,很好。然而,我希望利用GAE,同时具有持久化“任何类型数据”的灵活性,我认为这非常适合Restful web服务。我是说,我可以输入值并在任何时间点检索它们。@alphazero只需执行POST,我就可以存储键值,通过使用GET方法,我可以查询一个值,如:GET http://localhost/dn/org.myframework.KeyValue?key=='user:id:johnsmith',这将返回例如json对象。不知何故,我认为这会使持久化数据变得更容易弹性好,疼痛小。我认为这个项目更像是一个开源项目,我需要尽快开始,@alphazero根据你的问题,我相信这个用例将用于web服务。让web服务能够轻松持久化数据,而无需预先定义后端持久化层。这一点很好。我想模仿Redis类型,但是JSON字符串可以完成这项工作,毕竟使用数据存储的应用程序需要知道数据类型和键……我认为最好的办法是抛弃Java,使用Python,使用Expando数据存储类型。但是,如果必须使用java,那么要操作每个实体的数据类型将需要大量低级API工作。使用JSON字符串会简单得多。我想模仿Redis类型,但是JSON字符串可能会完成这项工作,毕竟它需要应用程序使用数据存储来了解与之匹配的数据类型
POST http://datanucleus.appspot.com/dn/org.myframework.KeyValue
{ "class":"org.myframework.KeyValue"
  "key":"user:id:johnsmith;followers",
  "value":"the_list",
}