Database design 混合数据库系统:NoSQL用于数据,SQL用于关系。最佳实践?
我正在构建一个应用程序,它的数据库系统将是至关重要的,并且需要具有可扩展性,因为它的所有价值都在数据中 我正在制作一个现场投票系统 我对SQL和MongoDB很熟悉,所以这几乎不是一个决定因素(尽管我现在更喜欢MongoDB结构和JS:) 但从我在网上读到的一切来看,我仍然对我的决定感到不安 我想做的是结合两者的优点:Database design 混合数据库系统:NoSQL用于数据,SQL用于关系。最佳实践?,database-design,nosql,database,Database Design,Nosql,Database,我正在构建一个应用程序,它的数据库系统将是至关重要的,并且需要具有可扩展性,因为它的所有价值都在数据中 我正在制作一个现场投票系统 我对SQL和MongoDB很熟悉,所以这几乎不是一个决定因素(尽管我现在更喜欢MongoDB结构和JS:) 但从我在网上读到的一切来看,我仍然对我的决定感到不安 我想做的是结合两者的优点: 拥有对象(用户、项目、注释等)的noSQL文档 为关系(表用户项、用户注释等)创建SQL表 每当有投票或在固定时间间隔内复制noSQL文档中的投票结果(以提高投票结果显示的速度
- 拥有对象(用户、项目、注释等)的noSQL文档
- 为关系(表用户项、用户注释等)创建SQL表
- 每当有投票或在固定时间间隔内复制noSQL文档中的投票结果(以提高投票结果显示的速度)
- 这样做是一种好的做法吗?网络似乎对此很害羞
- 即使在高分贝负载下,我也在优化花生吗?(将文档获取与完整SQL和查询(如select*from表,其中primary_key=XXX)进行比较)
我不认为好处大于缺点。7年后,我开始提出我自己的问题,感觉现在我可以帮助过去的我了 今天,我要去 这允许仍然有表、关系和索引,它们对于理解和原子性非常重要,同时还有
users
表中的可扩展字段,如identity
字段,看起来像:
identity {
firstName: "John",
lastName: "Doe",
address: "5 example st",
postCode: "XXX",
city: "Example city"
}
这是可以查询的,比如:select*from users u,其中u.identity->>lastName='Doe'
(语法不是100%确定)
虽然一开始这可能很令人惊讶,但它工作得很好。最好是当ORM包含对这些类型的开箱即用支持时,比如等等。如果我理解正确,您想像使用某种缓存一样使用MongoDB吗?从您描述的内容来看,我认为这不是一个坏主意,您只需确保MongoDB在应用层与RDBMS保持一致(基本上提高代码复杂度以提高速度)缓存复杂查询,我可能会使用memcached,并且我还可以有一个临时表来存储计算结果。在我的例子中,我还对使用文档来描述我的数据类(例如用户)感兴趣,以保持数据的灵活性、速度和格式。