【问题标题】:How to Think About a Relational Database on the Web如何考虑 Web 上的关系数据库
【发布时间】:2011-05-02 04:11:10
【问题描述】:

我一直在使用 python 进行一些简单的 Web 编程,并且我对生成和提供网页所涉及的大部分部分都有基本的了解。但是,我对使用关系数据库作为一种存储和检索数据的方式只有一点点把握。我确实了解 SQL 查询和数据库设计的基础知识,但无法理解我应该做些什么来允许并发访问(除其他外)。

考虑到这一点,我有几个相当具体的问题。但是,对于每个问题,我只对问题本身的答案部分感兴趣。我最感兴趣的是我是否以正确的方式提出这些问题。就这样吧:

  • 在使用关系数据库时,如何确保多个线程在写入数据库时​​不会相互干扰?
  • 是否有多个线程访问数据库会导致它们正在读取的数据不同步?
  • 我应该如何管理从数据库读取/写入的权限?
  • 是否存在不属于数据库的内容(图像、大段文本)?

我很想对这些具体问题的任何评论,或任何描述正确思考在网络上使用关系数据库的方法的资源的指针。

【问题讨论】:

    标签: language-agnostic relational-database


    【解决方案1】:

    您的很多顾虑都被 DBMS 抽象出来了。您通常不需要强调线程/并发相关的东西。您可以做的是将插入/更新/查询分组到事务中,以使它们更具原子性,并确保全部或不发生任何事情。例如,如果此类事务在中途受到干扰,则可以回滚。

    您没有提及您使用的是什么数据库,但这里有一个与数据库无关的事务小介绍。当然,您还应该查看数据库的官方文档。

    http://www.sqlteam.com/article/introduction-to-transactions

    就“什么东西不属于数据库”而言,图像和大块文本都可以。您可以存储二进制 blob,如果对您正在做的事情有意义,您可以存储代码。我建议的一件事是您考虑将图像直接存储在数据库中还是存储在服务器上的文件的路径/文件名是否符合您的利益。

    【讨论】:

      【解决方案2】:

      我应该做些什么来允许并发访问

      你让数据库来处理,这就是它的设计目的。


      • 在使用关系数据库时,如何确保多个线程在写入数据库时​​不会相互干扰?

      数据库会处理这个。有时这意味着其中一个查询将中止以避免死锁。您需要在代码中检测到这一点。

      • 是否有多个线程访问数据库会导致它们正在读取的数据不同步?

      是的,这是可能的。您对此无能为力 - 这是多个线程读取/写入相同数据的结果。您可以使用一些同步命令,但这些命令会影响性能。

      • 我应该如何管理从数据库读取/写入的权限?

      通过数据库安全机制,不管它们是什么。

      • 是否存在不属于数据库的内容(图像、大段文本)?

      大文件,尽管这取决于应用程序。将应用程序数据存储在您的数据库中。

      【讨论】:

        【解决方案3】:

        我不会直接向网络公开数据库;我在客户端和数据库之间有一个中间层来处理身份验证和授权、验证和绑定、数据库访问的同步和隔离等事情。

        这将有一个额外的好处,让我可以通过添加更多的中间层硬件来扩展。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-19
          相关资源
          最近更新 更多