在数据库存储信息上实现复杂算法

时间:2010-07-08 17:42:01

标签: c# sql database k-means

我正在尝试找出在关系数据库中对存储信息实施复杂算法的最佳实践。

具体来说:我想在包含许多文档的TFxIDF向量的大型MS SQL Server数据库上实现k-means算法(文档聚类算法)的变体(这些向量用作算法的输入)。

我的第一个想法是使用存储过程,函数,视图和所有其他基本的SQL Server工具在SQL中完成整个过程,但后来我想也许我应该编写托管代码(我能说流利的C#)在SQL Server上执行。

性能是一个问题,所以我也需要考虑到这一点。

我很感激我应该采取的任何建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

性能是一个问题

一直都是。在查看此类代码时,您必须考虑两种相反的趋势:

  • 由于索引,缓存和其他优化技术,数据库服务器通常最适合快速进行这些计算。你似乎明白这一点。

另一方面:

  • 这些计算很少孤立地发生。您必须考虑整个服务器性能,并且您的数据库通常是数据中心中负载最多的服务器。从技术和业务角度来看,它也是最难扩展的。技术是因为你必须平衡几个不同的组件,包括磁盘,RAM和CPU,而且要知道你的瓶颈在哪里并不容易。此外,这些往往是“大型”机器,组织中没有多少人会有经验调整。最后,它们通常不会很好地扩展。您无法像应用程序服务器那样轻松地添加另一个数据库服务器来共享负载。从商业角度来看,所有这些技术性的超大成本都会增加成本。更重要的是,数据库许可证本身通常是几千个每个cpu

将这两点放在一起,性能的最佳方法通常是使用数据库中的查询功能来提取您真正需要的记录子集,并且可以执行一些更简单的预处理 - 如果你愿意的话,低调的水果。然后在可能的情况下并行完成应用程序服务器上的繁重工作。