数据库IO有多慢?


大多数资深开发人员一定都经历过数据库 I/O 性能相当低的情况。但很多人可能没有意识到 I/O 操作有多慢,特别是数据库 I/O 速度与其他数据读写方法的速度之间的差距。

Java 是一种用于应用程序开发的常用技术。现在我们进行现场测试,看看Java中从Oracle和MySQL这两种典型数据库中检索数据的性能,并与从文本文件中检索数据的性能进行比较。

详细点击标题

结果:

  • 我们发现当使用SQL对上述数据表进行基于遍历的聚合操作并返回非常小的结果集时,数据库速度很快,比我们基于文本文件执行相同操作时快得多。这意味着遍历数据库中的数据表一点也不慢,或者可以说该数据存储格式具有相当不错的性能。
  • 障碍在于DBC 驱动程序非常慢。我们甚至怀疑这是一种有意的设计,它期望甚至强制数据不是从数据库中检索而是在数据库内部计算。

启示:
  • 当我们想要实现大数据计算的高性能时,从数据库中临时检索数据是不可行的,最好在数据库内部进行计算。
  • 如果必须先从数据库中取出数据才能真正处理计算,我们最好不要将数据存储在数据库中。

如果数据仍然保存在数据库中,那么无论我们在数据库外使用什么高性能算法,大多数情况下性能都不会令人满意;除非涉及的数据量非常小。

当数据库是唯一数据源时,有什么办法可以提高计算速度吗?
如果问题仅在于驱动程序速度慢,即速度慢不是由于数据库负载过重,我们可以使用并行处理来改善这种情况。

当并行线程数较少(一般<10)时,计算效率几乎呈线性上升。这意味着当有n个检索线程时,检索速度几乎快了n倍。测试结果是,6线程并行处理速度提升达5倍。

在测试中,4个线程使文本文件检索速度提高了3.6倍,复合表数据检索速度提高了3.8倍。