我们有一个非常大的应用程序客观化,但我们发现底层平台存在很多问题。例如:不能使用不等于1的不等式过滤器,基于自定义数据(最终用户变量)的排序是两个非常大的难题。我们是一个垂直的CRM。
既然我们正在使用客观化,那么有没有办法在没有太多痛苦的情况下迁移到不同的云平台?
我们可以重新构建一些应用程序,但是你会建议我们假设AppEngine没有运行?客观化是否可以或者可以轻松地为其他平台工作?
感谢。
答案 0 :(得分:1)
MongoDB的Morphia界面最初是基于Objectify的早期版本。随着键/值存储的发展,MongoDB对GAE用户来说似乎相当熟悉。如果你正在寻找一个低痛苦的转变,这可能是最好的选择。
请注意,使用MongoDB时,某些内容(如ad-hoc和不太理想的查询)会更容易,但有些内容(如事务)更难处理。当然,请确保它符合您的扩展要求。
答案 1 :(得分:0)
如果您停留在App Engine上,Java Datastore API页面会提示Slim3,也会显示低级数据存储API以及Objectify。
它还提到了JDO和JPA,但使用它们的原因是与相同接口的其他实现的兼容性,这些是子集实现,因此兼容性有限。
Storing Data in Java页面列出了其他选项Google Cloud SQL和Google Cloud Storage。这些将需要对您的代码进行更大的更改。
答案 2 :(得分:0)
一个不等式过滤器是App Engine的限制,而不是Objectify。这对我们来说永远不是问题,我们有一个非常大型复杂的应用程序,有近100种实体类型。关于如何解决这个限制,有很多关于SO的提示。
我不知道为什么排序数据有问题。只要它被编入索引,您就可以根据任何条件进行排序 - 用户生成与否。也许您可以详细说明这一点,我们可以提供解决方案。
App Engine是一个非常不同的平台,对于习惯于只使用关系数据库的人来说,学习和欣赏它的能力可能需要时间。您所看到的限制实际上是功能 - 例如,一个不等式过滤器允许非常快速(和一致)的查询时间,而不管实体的数量。我甚至会说应用程序越大,使用非关系型(App Engine)数据存储区就会越多。
学习如何使用App Engine可能会花费更少的时间,而不是转移到完全不同的平台。
更新:
我建议您对工厂问题采用以下方法(基于我对您的数据模型和使用模式的非常有限的信息)。
如果您在这些实体上有许多标准(非用户生成)索引属性,则可以通过将每个实体拆分为标准部分(例如" Plant")和自定义部分( " Plant_custom")以及最终用户生成的属性。这样,对自定义部件的更新将会更便宜,因为它不会触发标准属性上的索引重写。然后,如果查询涉及标准属性,则使用廉价的仅密钥查询检索与标准属性上的搜索条件匹配的实体列表,然后使用廉价get
操作检索自定义实体(标准和自定义实体应具有相同的ID),最后根据自定义搜索条件进行过滤。