我目前正在使用EAV方法搜索我们老化的MySQL数据库的替代方案。当前的项目似乎已经超出了传统的面向表的数据库结构,特别是在这样的数据库中搜索。 我领导并研究了各种NoSQL数据库系统,但我找不到任何似乎正在寻找的东西。也许你可以提供帮助。
我将向您展示一个关于我拥有什么类型的数据以及我想对它们执行哪些操作的一般化示例:
我有一个具有少量META属性的对象。对象的所有实例共有的属性。例如这些
DataObject Common(META)属性
然后我的每个对象都有可变数量的其他属性。很可能,许多对象将共享许多这些属性,但没有规则。对于我的示例,我们说每个Object实例都有5到20个这样的属性。以下是一些示例
数据对象变量属性
对其他数据的引用是一个想法,但目前还不是必须的。如果需要,我可以在我的应用程序逻辑中提供这些。
小样本:
图像
典型操作
平均存储量可能有大约1-5百万个这样的对象,每个对象有5-20个属性。
除了通常的东西,比如将一个对象写入数据库或通过它的uid读取它,最有问题的操作是:
存储要求
TL;博士
需要具有面向对象数据的超快数据库系统,即使有数十万个项目也能快速搜索。
我可以在此处找到我寻找更好的mysql替代方案的原因:Need MySQL optimization for complex search on EAV structured data
<小时/> 的更新
像Redis这样的键值存储不是一个选项,因为我们需要对数据进行大量搜索。在典型的键值存储中不可能的某些东西。
最后,我们使用MongoDB略微优化的方案,以充分利用MongoDB对indizes的使用。
一些小缺点仍然存在,但目前可以接受: - MongoDBs聚合函数不能用非常大的结果集进行wotk。我们必须使用find(并优化我们的数据结构以使其足够) - 您无法对特定值上的大型数据集进行排序,因为它会占用大量内存。您也无法在这些值上创建indizes,因为它们是无架构的。
答案 0 :(得分:2)
我不知道你是不是比我更复杂的答案。但也许我可以激励你一点点。
MySql是可扩展的,可以用于您的课程。我认为如果你的数据库速度慢,那更多的是优化和服务器问题。许多具有大量数据的系统使用MySql并且工作得很好,尽管NoSql(Not-Only SQL)是针对具有不同属性的大量数据构建的。
有许多不同的NoSql提供程序,它们有不同的处理数据的方法。 在选择NoSql平台之前考虑一下。
可能性
大多数网站都使用基于文档的存储,但是ex。 facebook正在使用基于列的,因为有许多动态的属性。
尝试基于文档的NoSql最后,它实际上取决于您如何构建和优化数据库,而不是您选择哪种技术,尽管选择合适的技术可以节省大量时间。
我们开发的系统使用MySql和NoSql的组合,具体取决于我们使用的数据。系统本身的MySql和我们通过API导入的所有数据的NoSql。
希望这会激发一点,并随意提出任何问题