Answers:
您可以使用NoSQL数据库的专用键值类型,该类型针对此类任务进行了优化。看一下:
当然,您可以使用MySQL或任何其他关系数据库,但是专门为键值类型的数据设计的解决方案应该更好(否则,首先设计它们的目的是什么,但可能会小得多) (就RAM和HDD而言)解决方案)。
现在换个完全不同的东西:
鉴于:
开箱即用的解决方案:
将每个产品作为TXT资源记录转储并将其存储在DNS中,例如:
$origin products.example.com.
product_1_name IN TXT "product 1 description"
product_2_name IN TXT "product 2 description"
...
product_3000000_name IN TXT "product 3000000 description"
好处:
为什么这可能不是一个好主意的原因:
带有MyISAM和一些良好索引的MySQL听起来很完美。当然,还有许多其他选择,但是在任何商用Web主机上,MySQL都得到了广泛的支持(如果不是通用的话)。根据您所需的速度,memcached也许也值得一看,但是在不知道每个键/值对的大小的情况下,将300万个键/值对存储在内存中可能比180Mb CSV文件还要糟糕(哦,一个180Mb的CSV文件,因此我们确实知道它们的大小。它们必须是非常小的对,因此memcached可能会更好)。
您不希望有300万个静态HTML文件,这将严重损害文件系统。即使在S3上,单行CSV也会有相同的问题。没有人想要一个文件夹中的300万个文件。
So you think MySQL is the way to go, really?
不,不是真的,但是它非常灵活,正如我提到的那样,几乎得到了所有人的支持。但是,LazyOne在上面发布了一些不错的选择。我不记得术语NoSQL的,但它是漂浮在我的大脑某处
您可以使用伯克利数据库来完成这种事情,即使自Perl5诞生以来就没有那么时髦。Berkeley仅支持键值对,并且您将整个数据库绑定到哈希并按此访问它。
坐在您的书架上的许多较旧的Perl参考资料中都对使用Berkeley进行了详细介绍,或尝试使用BerlleyDB CPAN模块的Perldoc。我通常避免使用Berkeley DB(尽管我的雇主有很多古老的代码在其中扮演着重要角色,并且某些DB与您的DB一样大),因为当数据变得更加复杂时,这并不有趣。
您已将问题标记为亚马逊S3。
我想提请您注意他们的其他相关产品之一,即Amazon SimpleDB。
听起来SimpleDB数据模型很适合您的应用程序类型。
这不是插件,但值得一看,尤其是当您计划使用Amazon云服务时。
SDB数据模型类似于电子表格。
请参阅此处以获取更多信息:http : //aws.amazon.com/simpledb/数据模型:http : //docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/
即使任何关系数据库都可以轻松处理180mb的数据,但我还是强烈建议MongoDB(http://www.mongodb.org/)位于MySQL,Redis,MemcacheDB和其他更简单的键值存储或关系数据库之上。原因是对于此类问题,MongoDB是使用最快,最具表现力的系统,它允许无模式限制的超快速动态更新,因此您可以根据需要使用不同的格式。几天前,我在Guardian.co.uk的一次演讲中,他们已经做出一项政策决定,禁止所有关系数据库,并独家使用MongoDB来提供新闻。您可以了解他们的网站有多快以及自1995年以来一直在线(英国最古老的在线报纸)。由于关系数据库,它们在过去也经历了各种瓶颈。对于180mb,MongoDB将从内存中提供所有服务,因此sub-ms加载时间可能是这种情况。
最佳方法实际上取决于数据和查询的质量和性质。对于初学者来说,无论您使用哪种方式查看产品,都可以在单个表中找到180MB的数据。每天3万次查询甚至不再是问题。使用正确配置的数据库,任何旧桌面都可以处理此负载。
其他人已经指出了您的两个主要选择,即MySQL或noSQL数据库。
如果每个产品都有一定数量的属性(例如制造商,价格,仓库编号等),那么最好的选择是为这些属性创建列,然后将键/值对转换为平面表格式,使用产品ID作为该表的主键,即使某些列仅被一半的行使用,这也将非常有效,因为对于大多数产品,您只需运行1个查询即可检索其所有属性。这是有关产品的数据,我想这很可能就是您的数据结构。
如果属性在状态和数据类型方面差异很大,则最好使用noSQL数据库,该数据库比传统的SQL数据库更有效地处理这种情况。
关于性能:我以前曾在一家电子商务公司工作过,很长一段时间以来,该公司一直向该网站提供来自MySQL服务器的数据。该服务器具有2GB的RAM,数据库总计约为2GB。5GB的大小和最高负载下,服务器每秒处理数千个查询。是的,我们已经做了很多查询优化,但这绝对是可行的。