1

的表现我创建了具有以下表用户活动的数据库:如何测试数据库

user_id  | INTEGER | user being notified 
actor_id  | INTEGER | user performing the action 
activity_type | STRING | classname/type of the object being notified 
activity_id | INTEGER | id of the object being notified 
context_type | STRING | classname/type of the object's parent 
context_id  | INTEGER | id of the object's parent 
read/view_at | DATETIME | timestamp of when user saw it 

我不知道这样的设计在性能方面不错。所以我想以某种方式测试它。 我可以使用大量数据填充数据库并打开页面,我需要从此表中获取数据,但是我不知道这是否是相关测试。

当Feed表中有10.000个用户和50.000.000记录时,有没有一种很好的方法可以看到这种设计将如何执行?

我不知道这是否可以帮助,但这个我使用MS SQL Server

+2

建立它;测量它; **然后**调整它。 –

+0

这意味着将此设计投入生产。但是如果我获得了50.000.000个活动,并且我发现用户由于数据库缓慢无法打开页面,该怎么办?我需要确保这种活动设计能够奏效。 – 1110

+1

什么是您的硬件?你用SSD吗?你的指数是什么?是否/您可以设计模式绑定视图来缓存聚合?你的FK是什么?我只开始提出解决您的问题所需的相关问题。 **只要建立一个3NF设计**并解决实际存在问题时的性能问题。 –

回答

0

关于性能,没有假设是安全的。您应该按照下列步骤操作:

  • 定义有关负载和响应时间的性能目标。您应该确定接受的特定数据加载的响应时间。

  • 定义资源。并非每个机器配置都会表现相同。您应该使用目标配置构建虚拟Maching。

  • 执行load testing。你可以通过使用诸如SQL Server load generator之类的工具来完成。

希望我帮了忙!

0

这为我工作至今:

  1. 找出一套,如果是性能的关键查询。
  2. 设计数据库,以便DBMS可以针对上述查询使用快速执行计划。
  3. 装满代表性的测试数据的数据库,并确保真正使用上述预期的查询执行计划(和每一个人查询的性能是令人满意的)。
  4. 基准软件的整个“垂直堆栈”。到现在为止,不应该有太多不好的惊喜。

正如您所看到的,数据库设计不仅仅是满足业务需求。事实上,了解客户打算如何访问数据是设计过程的组成部分。

换句话说,传统上认为“逻辑设计”是不够的 - 在逻辑和物理设计之间需要有一个“双向街道”。

当饲料表中有10.000个用户和50.000.000条记录时,有没有一种很好的方法可以看到这种设计将如何执行?

该句子没有包含足够的信息来回答。

首先告诉使用你打算如何访问数据,然后我们可以帮助你(重新)设计数据库以有效地支持特定的访问模式。


例如,如果“加载页面”是用于用户体验(这通常是这样)关键的,使得,将通常在该过程中被执行的查询的列表。

其中包括“物理”技术,如索引,集群,分区等,而且还可以包括某些方面是传统的,虽然“逻辑”的设计,如钥匙和关系的设计。如果您了解典型DBMS使用的基础数据结构,则可以预测大部分设计决策的性能结果。 Use The Index, Luke!是一个很好的介绍。

+0

基于模式,我需要获取感兴趣特定用户的所有记录。因此,这将是简单的'选择顶部10 *从活动where user_id = 123 order by read/view_at desc'。我认为,因为我在这里拥有所有的ID来基于类型使用连接到不同的表格,但我认为这会使我成为一个问题,所以我决定在该表格中保留尽可能多的数据。我知道这个denormalize数据库,但找不到更好的方法来做到这一点。 – 1110