我正在从头开始构建一个PHP框架(不幸的是我在这个问题上没有任何选择)。该框架需要严重依赖面向对象的数据,因此需要能够有效地存储大量面向对象的数据。
我正在努力解决第二部分问题。
我已经为此工作了几个月。最初我被介绍了ORM的想法,在尝试了一些预先构建的库(Doctrine 2,Redbean等)之后,我很喜欢这个想法,但是我找不到的东西都是按照要求的方式运行的,所以我开始创建我自己的ORM,结果非常好。唯一的问题是它在性能方面受到影响,在花了一些时间试图优化它之后,我现在确信ORM不是解决问题的方法。虽然很接近,但它并没有完全削减它。
我已经简要介绍了其他解决方案,但由于我在这方面缺乏经验,我很难确定解决方案。
以下是数据存储引擎的要求:
find a customer where customer.address.postcode LIKE ('%XXX%')
任何建议都将不胜感激
修改
感谢那些曾经试图在我疯狂的努力中帮助我的人。回答迄今为止提出的一些问题:
您尝试了哪些解决方案,为什么它们不起作用?
ORM系统
我曾尝试过少量用于PHP的预构建ORM库。包括Doctrine 2和Redbean。使用Doctrine,更多的是如何指定模型的SCHEMA,因为您需要在docblock中执行此操作。由于我的要求,我发现使用起来特别笨拙,特别是因为我知道有很多方法可以避免这种情况。我最终设法让Doctrine以我想要的方式工作,但这是在破解代码之后。再次,这很有趣,但它不对。
Redbean主动要求我更改对象的属性名称。我的一个要求是基本上能够插入任何类型的面向文档的对象,并存储它。因此,为了做到这一点而必须专门命名属性是违反直觉的。再一次,我确实和Redbean玩了一段时间才能让它发挥作用,这是不对的。
在玩了几个ORM系统后,我觉得我有自己的知识。同样,我制作的ORM系统很好,因为它精确地满足了要求。由于性能不佳,特别是在处理大量数据时,它被大量放弃,但在处理大部分复杂的模型时更是如此。
将对象存储在XML文件中
有一段时间我考虑过这个问题,认为我的要求可能意味着我总是最终会遇到性能问题。因此,我开始设计一种生成基于文本的存储的方法,最终最终创建了一个完整的SCHEMA引擎和一堆其他有趣的东西。事实证明这最终只是一个有趣的项目,我根本无法让它完成任务。
的NoSQL
我最近的努力让我走上了MongoDB和其他一些NoSQL系统这样的系统,我没有像Cassandra那样进入。
MongoDB非常接近我可以使用的工具,但是它需要我添加一个额外的层,因为我实际上需要一个SCHEMA,因为我的对象总是符合特定的结构体。我正在慢慢地与MongoDB达成协议可能是解决方案,但是我想确保在我花更多时间在这之前。
你到底有什么意思?
当我提到效率时,我不是100%谈论性能,虽然性能肯定是我用来考虑我的选项的一个重要因素,我明白走下这条路线而不是关系数据库之类的东西,性能自然会成为一个问题。
我更谈论使用正确的工具。我从不喜欢破解别人的代码来让事情发挥作用。对我来说,感觉好像我正在推动系统没有被设计成下降的道路,并且在未来的某个时刻它会让我陷入困境。
所以,实际上,当我提到我正在寻找一些东西"高效"时,我意味着工具尽可能地匹配要求,因此我只使用/扩展功能,而不是重写它。
答案 0 :(得分:0)
以下是一些需要研究的路线。您对存储"对象的要求" (在涉及数据库方面相当广泛的术语)让我想到:
customer.address.postcode
的要求使我认为您可以将数据存储为层次结构,在这种情况下,您可以使用多种算法。看看nested sets。这适用于关系数据库,无需借助递归SQL。另一方面,Doctrine是我所听到的一个很棒的图书馆,但我怀疑你需要先弄清楚要使用哪种技术。它被广泛地设计为映射到关系数据库,因此如果您无法在原始RDBMS中干净地表达您的问题,那么Doctrine可能无济于事。
(这可能是XY question,很难说。你说你需要Y,但是如果你能告诉我们你想要获得X,那么你可能会得到反馈#39;重新获得会更具体 - 并带你走向更好的方向。)