【发布时间】:2012-07-19 13:49:11
【问题描述】:
这绝对是疯子.....
我刚刚开始从事一个新项目,我对刚刚看到的内容感到震惊。该项目是一个位于 Oracle 数据库之上的 C# Web 应用程序。现在所有的存储过程实际上都不是存储过程......它们只是存储在服务器目录中的文本文件中的 SQL 脚本。当应用程序启动时,它会查看目录并遍历每个文件并读出文本并将其保存在字典中。它还在文本上运行正则表达式,删除 [PARAM] 等特殊序列,并用正确的符号替换它们,例如':' 在 Oracle 的情况下或 '@' 用于 SQL SERVER。然后,当代码想要执行其中一个语句时,它会调用一个方法,该方法在字典中找到正确的语句并运行它。
现在这似乎已经完成,以防他们想要交换底层数据库技术。他们说他们只需将目录中的 sql 文件换成具有适当语法的文件即可。
现在我通常希望存储过程实际上是存储过程并存在于数据库中。与数据库对话的单独项目(层)。然后,如果 db 技术发生变化,只需添加另一个数据层项目并将 dll 换出....
我发现目前的做法存在很大问题:
- 正在创建的数据库服务器上没有执行计划。
- 大量开销读取数百个文本文件,为每个文件构建一个字符串,在其上运行正则表达式。
- 不检查 SQL 语法。
- 内存占用很大,所有这些存储过程都在内存中
你觉得怎么样?
这真的很糟糕还是我只是在呻吟,因为我以前从未见过这样的事情?
这种方法还有什么问题?
任何 cmets 都将不胜感激,因为我正试图向同事传达这太疯狂了....
【问题讨论】:
-
当仍然需要存储过程和数据库逻辑时,我已经看到了一些使数据库不可知的解决方案。这方面的每一个例子都是 YAGNI 的典型代表……从来没有人改变过数据库。我以前见过这样的事情,但没有在数据库提供者之间进行转换。除了缓存点之外,我最初必须同意您的所有担忧。加上维护和添加一些东西必须是一项半工作。
-
leigh - 我的“心”向你倾诉。正如上面提到的亚当,这是一个寻找问题的解决方案(尽管很弱)。没有进行优化,因为驱动器故障存在严重的风险(当然,会有备份??)。总而言之,无论谁想到了这种情况,都应该在他们的“掩体”中颤抖,因为当事情没有按预期工作时,你无疑会定期寻找他们。祝你好运(是的 -BONKERS)!!
标签: sql database architecture