Mysql 寻找一个数据库解决方案,主要用于读取应用程序,查询3亿条记录

Mysql 寻找一个数据库解决方案,主要用于读取应用程序,查询3亿条记录,mysql,bigdata,monetdb,Mysql,Bigdata,Monetdb,寻找合适的数据库技术来高效查询300 mil记录表。表可能包含5-30列,大多数为tinyint+zip,state。用户可以在许多列上发出带有where条件的任意查询,并使用count(按状态)或zip进行分组。从某种意义上说,数据集是静态的,数据定期重新加载,没有插入,只有读取 我已经用InnoDB尝试过Mysql(RDS)。由于大量记录和查询的性质,我无法获得令人满意的性能 尝试了MonetDB(columnar store)并取得了很好的效果,但它似乎没有被许多人使用,这引起了一些担忧

寻找合适的数据库技术来高效查询300 mil记录表。表可能包含5-30列,大多数为tinyint+zip,state。用户可以在许多列上发出带有where条件的任意查询,并使用count(按状态)或zip进行分组。从某种意义上说,数据集是静态的,数据定期重新加载,没有插入,只有读取

我已经用InnoDB尝试过Mysql(RDS)。由于大量记录和查询的性质,我无法获得令人满意的性能

尝试了MonetDB(columnar store)并取得了很好的效果,但它似乎没有被许多人使用,这引起了一些担忧

要求响应时间足够快,以便响应web UI进行分析


我还应该探索哪些其他技术?

看看谷歌应用程序引擎。他们通过索引自动优化你的查询以获得快速响应,这就是谷歌,因此他们可以轻松地从零流量扩展到百万点击量


应用程序可以用Java或Python编写,使用您自己或他们自己的框架。

试试Cassandra。如今,它的应用非常广泛(Facebook、Netflix和许多其他公司)

如果您想使代码相对抽象于底层数据库技术,可以使用JPA2.0


此外,在本地使用Cassandra非常容易(用于调试和单元测试)。就拿这个吧。

我鼓励您尝试MonetDB,这取决于您的查询,但一般来说,作为一个列存储,您应该会获得良好的性能(甚至超过3亿条记录)。此外,您不需要手动创建索引,这主要是自我优化。MonetDB还有一个可用于编写快速分析web应用程序的。还有一些流行的连接器:Ruby、Python、Perl、PHP、Java(通过JDBC)


别担心,MonetDB正在积极开发中(免责声明:我实际上是一名开发人员),您可以在用户邮件列表中相对快速地获得答案。

谢谢,我将继续与MonetDB合作,到目前为止,我找不到比我的用例性能更好的东西。Dimitar,您忘记了R连接器:)类链接已关闭。你知道一个活动版本吗?是的,链接已关闭,我不建议再使用。而是用于cassandra本地调试。可以这样做:
File tempDir=Files.createTempDir();tempDir.deleteOnExit();CassandraEmbeddedServerBuilder.noEntityPackages().withClusterName(“测试群集”).withDataFolder(tempDir.getAbsolutePath()).cleanDataFilesAtStartup(true).withKeyspaceName(“myKeyspace”).withCQLPort(myPort).buildNativeSessionOnly();}