我正在开发一种内部网墙,供人们发布信息。 我一直在使用普通的DB结构,即:
user_id / username / email / password / name / ... / backgroundColor / ... / mood / ...
新合作伙伴加入了该项目,他想切换到一个键/值数据库,以便在数据库中实现更大的灵活性,即:
user_id / keyName / value
作为一个菜鸟,我理解他的意思以及它是如何更灵活的,但我担心它会增加对数据库/行的查询次数并减慢速度。除此之外,我们需要一些非常通用的类型来确保一切都适合。
任何人都可以告诉我使用这种数据库结构的优点和缺点以及您建议使用哪种?这适用于小型网站,但是当我们获得大量流量和用户时会导致问题吗?
我见过其他帖子,但他们不跟我说话,即: Non Relational Database , Key Value or flat table,Using a relational database and a key-value store in combination
感谢您的帮助。
答案 0 :(得分:1)
如果你走这条路,MySQL就不再是最好的选择了。还有其他NoSQL产品用于处理结构较少的键值数据。
NoSQL的优势在于它可以非常好地扩展到超大型网站;缺点是你丢失了很多SQL可以很容易做的高级内容(复杂的查询,连接等)。如果您从高级SQL功能中获得了很多好处,那么坚持使用您所拥有的功能可能会更好。如果您一次只查看一个表中的内容并始终使用简单的密钥来访问数据,并且您担心有一天会达到MySQL的极限,NoSQL最终会允许更高级别的可伸缩性在长期。
答案 1 :(得分:0)
想一想。对于一个非常简单的用例,例如为给定的用户ID获取八个基本“属性”。目前,这是一个需要的键/值模式中的单个查询
八个查询,例如SELECT ATTR WHERE KEY-NAME = "USERNAME" AND USERID = "XXXXXX";
。
考虑更复杂的用例,例如“给我所有用户'心情'快乐和背景颜色'粉红色'”。这将是您当前架构中的一个简单选择。在键/值模式中,这将涉及复杂的连接和子查询。
No-Sql可以很好地扩展,因为它没有做太多。通过切换到“键/值”模式,您将失去大量功能,以换取一些非常简单的访问速度。