我应该使用哪个数据库主要用于写入一次/多次读取操作?

时间:2010-08-17 11:39:58

标签: database database-design relational-database non-relational-database

我正在构建一个应用程序,它需要查询一次写入但不再更改的大量数据。我应该使用MySQL还是应该使用SimpleDB或BigTable? (我需要写一次,多次阅读)

谢谢。

编辑:我想使用Heroku,对我来说超过5MB。 “数千行”占用超过5MB。这就是为什么我想知道我是否应该使用CouchDB,SimpleDB或MongoDB以便不支付Heroku收费的15美元。建议克服这个?谢谢大家的评论!

6 个答案:

答案 0 :(得分:3)

“大量数据”是什么意思?数千,数百万,数十亿行?每行有多少列?你会使用很多连接或简单选择吗?

如果您的表很简单或需要使用复杂的JOIN,我会选择您熟悉的任何SQL。

如果您的结构很复杂,并且面向文档的数据库符合您的需求,我会选择MongoDB(首选)或CouchDB。

编辑:根据您的评论 - 数千行并不是那么多。使用您喜欢的数据库并根据需要设置尽可能多的缓存(阅读有关必要缓存量或开始新主题的更多信息)。或者使用Memcached,但我建议使用数据库缓存,因为它既有效又无痛。好运男人!

答案 1 :(得分:1)

比您选择的数据库引擎更重要的是您的表结构。您应该阅读OLAP数据库结构。另一个考虑因素是您正在编写的语言,请确保对要使用的数据库的API有很好的支持。由于缺乏关系/交易,CouchDB会很好,因为它的开销非常低。

答案 2 :(得分:1)

对于“一次写入,多次读取”,非规范化数据库(不会浪费周期来进行连接等)是一个不错的选择。

因此,您应该设计表格,使这些读取必须执行最少数量的I / O和连接。您可以使用任何数据库执行此操作。表格的结构很重要。

AFAIK,SimpleDB和BigTable是分布式数据库,如果您的用户在地理位置分布(从而绕过网络延迟),则可提供非常好的查询速度。如果I / O延迟不是瓶颈,它们将无法提供太多优势。

答案 3 :(得分:1)

您拥有的数据量很小。任何DBMS都将处理几千行。我建议你先看看一个流行的SQL DBMS--比如你已经提到过的MySQL。您需要根据功能要求做出选择,而不是关注数据大小。

答案 4 :(得分:0)

对于这种小型用例,单独的数据库是过大的。只需将数据序列化为平面文件,然后以您的语言将其读入所选的地图数据结构即可。

答案 5 :(得分:-1)

我认为您应该使用非事务性和面向文档的数据库,如MongoDB或CouchDB。