数据库反规范化?
Database Denormalization?
只是为了提供一些上下文,我正在使用 Pusher(云上的 Websocket 服务)开发一个实时聊天应用程序,其中每条消息在被推送到 websocket 服务器之前都会记录在我的服务器中,而 websocket 服务器又会推送数据client.So 我正在使用 MySQL 来存储消息。
这样一个 table 是我的消息,其中包含以下字段 id,chat_payload,message_time,user_id,room_id
。
为了填充初始聊天室,我需要检索消息历史记录,其中每个消息对象都将包含 username,useravatar,chat_payload,timestamp
。但是 useravatar,username
存储在 users, user_meta
tables respectively.So 使用连接获取 运行 上的数据显然看起来很昂贵,因为 user_meta
table 增长非常 fast。并且清楚地将用户名、useravatar 存储在 messages
table 似乎不对,因为它会带来更新问题。
所以考虑到上述情况,任何人都可以建议一个合适的 DB/Application 设计吗?
storing username,useravatar in messages table ... would pose updation problems
好的数据是第一要务,对吧?您正在考虑为了您无法确定的性能承诺而妥协。
有时人们没有充分理解正常形式是专门为了防止所谓的更新异常而发明的。 3NF 将大大有助于保持数据的一致性。作为一个额外的好处,没有冗余是 高效的 ,因为它最大限度地减少了必须更新的信息量。
出于这些原因,在其他 1000 个中,最好的做法是设计一个规范化的数据库,就像教科书上说的那样,让筹码落在可能的地方。您可以肯定,您的 DBMS 设计 时考虑到了连接。它有许多使它们高效的特性,尤其是索引。依靠它,而不是你对快或慢的第一印象。
如果您 运行 遇到性能问题,数据库设计 本身 不太可能有问题。如果是,那就慢慢来,你有时间根据实际情况,根据实际情况去审视和纠正。有了那个,总比现在没有好。
只是为了提供一些上下文,我正在使用 Pusher(云上的 Websocket 服务)开发一个实时聊天应用程序,其中每条消息在被推送到 websocket 服务器之前都会记录在我的服务器中,而 websocket 服务器又会推送数据client.So 我正在使用 MySQL 来存储消息。
这样一个 table 是我的消息,其中包含以下字段 id,chat_payload,message_time,user_id,room_id
。
为了填充初始聊天室,我需要检索消息历史记录,其中每个消息对象都将包含 username,useravatar,chat_payload,timestamp
。但是 useravatar,username
存储在 users, user_meta
tables respectively.So 使用连接获取 运行 上的数据显然看起来很昂贵,因为 user_meta
table 增长非常 fast。并且清楚地将用户名、useravatar 存储在 messages
table 似乎不对,因为它会带来更新问题。
所以考虑到上述情况,任何人都可以建议一个合适的 DB/Application 设计吗?
storing username,useravatar in messages table ... would pose updation problems
好的数据是第一要务,对吧?您正在考虑为了您无法确定的性能承诺而妥协。
有时人们没有充分理解正常形式是专门为了防止所谓的更新异常而发明的。 3NF 将大大有助于保持数据的一致性。作为一个额外的好处,没有冗余是 高效的 ,因为它最大限度地减少了必须更新的信息量。
出于这些原因,在其他 1000 个中,最好的做法是设计一个规范化的数据库,就像教科书上说的那样,让筹码落在可能的地方。您可以肯定,您的 DBMS 设计 时考虑到了连接。它有许多使它们高效的特性,尤其是索引。依靠它,而不是你对快或慢的第一印象。
如果您 运行 遇到性能问题,数据库设计 本身 不太可能有问题。如果是,那就慢慢来,你有时间根据实际情况,根据实际情况去审视和纠正。有了那个,总比现在没有好。