我正在开始一个项目,并试图抽象出它面临的挑战。我来自 RDBMS 背景,希望为我的下一个项目对存储技术做出明智的决定。我知道如果 RDBMS 是我唯一的选择,我将如何解决这些问题,但我有兴趣了解该行业的发展方向——理想情况下,有人看到这一点并说:'我正是这样做的,并使用了 ###,它工作得很好,但我们不得不使用### 来处理使用高峰。如果这是业务的最佳选择,我并不害怕爬回我的 RDBMS 洞穴。
所以问题:
[object A] – type: person
{
/*some fields that every person has*/
name: “A”
email: “a@example.com”
age: 22
/*some fields that can be dynamically*/
my_custom_user_property : 332 /* or maybe a struct of some type */
/*some relations (fixed)*/
groups: member of C; administrator of C; member of F; reader of G
/*some more arbitrary relations*/
mother_of: B
}
[list of groups]
也就是说,每个客户都可能希望将自己的“列”添加到数据库中,然后再针对它们进行搜索。
我的期望是数据不会快速变化(高读写比),我可以很高兴地异步[例如报告的生成]。但是基于简单标准的提取需要快速并针对自定义字段。
在数据库之上是一些限制在列级别可以看到的功能——例如,只有 F 的成员可以查看 G 成员的电子邮件。这些再次需要是动态的(假设我的自定义用户属性是敏感的,并且我有一些方法可以围绕它设置业务规则)。根据技术,我想这可能存在纯粹的应用程序(获取整个对象,然后根据规则进行限制)或更复杂的查询构建器类型系统。
接下来是“图表”类型的搜索——我目前看不到这超出了几个自由度,但能够通过几个不同的路线找到例如与组的 2 度连接的用户(某些连接可能不固定在开发时间)。如上所述,这可能是可以异步处理的东西,
我想寻找目前能够处理 1000 万用户、100 万组、100K 日活跃用户、5K 能够管理的用户(例如添加列)的东西。(是的,使用 MySQL 或类似工具完全可以实现,但需要合理的工程量)
就实际开发/基础设施而言:
- 我不想用无证的配置/陷阱之类的东西撕掉我的头发(这就是说我很高兴学习东西,只要它不会让我为了起步而获得学位)
- 可以设置高可用性和健壮性的东西——例如体面的集群管理和可用的报告(或者在专家的帮助下不那么昂贵)
- 最好是开箱即用的相对较快部署的东西
- 我可能有一个金融交易模块(未确认),所以 ACID 是加分项
- 具有成熟的库,可以很好地与 Spring 框架配合使用。
- 当然,好的文档/示例。足够的信息来掌握概念模型以及实用的操作方法
- 开源
我已经阅读了[很多]关于那里的产品的信息,但想将其缩减为 2 个我可以淘汰的明智选择。阅读时:MongoDB;卡桑德拉;沙发底座;沙发数据库;新4J;(还有更多),我选择了 CouchBase。但我也知道有大量的营销材料旨在吸引像我这样的人对某个特定的想法。
所以这个问题总结为三个问题:有没有什么方法行不通?有没有被证明有效的方法?目前是否有明确的最佳选择?