到目前为止,我找不到明确的答案,但也许我的搜索方式不对。 我的问题是,核心数据可以用作服务器项目的持久性存储吗? Core Data的限制在哪里,Core Data和SQLite可以处理多少数据? SQLite应该根据他们的网站很好地处理很多数据。我知道一个专门的Java Persitence Manager,它有一个Oracle DB作为存储,可以毫无问题地处理数百万个条目和3000个客户端。对于我自己的项目,我想知道我是否可以在服务器端使用Core Data进行用户管理和实习微博,使用多达5000个客户端发短信。它会处理如此大量的数据还是我必须自己管理类似的东西?如果有数据和核心数据,有没有人会有大量的经验?
谢谢
twickl
答案 0 :(得分:5)
我不建议将Core Data用于服务器端项目。 Core Data旨在处理单个面向对象应用程序的数据,因此它缺乏专用服务器软件的许多常见功能,例如轻松处理多个同时访问。
真的,我建议使用它的唯一情况是服务器端逻辑非常复杂且用户数量很少。例如,如果您想编写内部Web应用程序并且几乎拥有服务器上的所有逻辑,那么Core Data可能会很好用。
Apple曾经拥有WebObjects,这是一个使用面向对象的数据库来管理服务器的软件包,就像Core Data一样。 (Core Data的灵感来自WebObjects的一个名为Enterprise Objects的组件。)然而,IIRC Apple不再支持WebObjects供外部使用。
最好使用其中一个专用服务器软件包,而不是尝试自己动手。
答案 1 :(得分:2)
我没有以您描述的方式使用Core Data的经验,但是我对该体系结构的理解使我相信它可以被使用,具体取决于您计划查询和操作数据的方式。
核心数据非常擅长维护对象图并使用故障根据需要将部件带入内存。通过这种方式,即使使用大型数据集,服务器也可以很好地降低内存需求。
Core Data不是很擅长操作对象集合而不将它们加载到内存中,进行更改并将它们写回磁盘。 Brent Simmons wrote a blog post about this,他决定停止为他的一些RSS阅读器的模型对象使用Core Data,因为像“将所有标记为已读”这样的操作无法扩展。虽然您希望能够说出UPDATE articles SET status = 'read'
之类的内容,但Core Data必须加载每篇文章,设置其状态属性,然后将其写回磁盘。
这不是因为Apple工程师很愚蠢,而是因为查询层无法对存储层做出假设(您可能使用的是XML而不是SQLite),并且还必须考虑到级联更改以及某些文章对象可能已经加载到内存中,需要在那里更新。
请注意,您也可以为Core Data编写自己的存储提供程序,请参阅Aaron Hillegass的BNRPersistence项目。因此,如果核心数据“大部分都是好的”,您可以为您的应用程序改进它。
因此,您的问题的可能答案是核心数据可能适合您的应用程序,只要您不需要依赖批量更新到大量对象。通常,没有算法或数据结构适用于每个场景。工程是明智地选择权衡取舍。在任何情况下,您都找不到适合许多客户的任何东西。它总是很重要你在做什么。