【发布时间】:2016-05-07 21:47:57
【问题描述】:
我试图找出不同的关系数据库和 NoSQL 数据库是如何工作的,以便了解这个或那个数据库的性能行为。 所以昨天我用PostgreSQL CSV file data into a PostgreSQL table创建了一个数据库。
同样的例子:Movielens (http://grouplens.org/datasets/movielens/)。我们有电影和收视率。电影有多种类型。我把它们分成一个单独的表,因为它是一个 1:many 关系。用户与电影之间也存在多:多关系。我需要能够以多种方式查询此表。
现在我想用 Cassandra 创建相同的数据库。我对表进行建模以优化以回答特定查询
CREATE TABLE movies (
movie_id int primary key,
title text,
avg_rating decimal,
total_ratings int,
genres set<text>
);
# shows all movies for specific genre
CREATE TABLE genre_to_movies (
genre text,
movie_id int,
name text,
primary key (genre, movie_id)
);
# show the number of movies of specific genre
CREATE TABLE movies_per_genre (
genre text primary key,
movies int
);
# shows all ratings for specific movie
CREATE TABLE ratings_by_movie (
movie_id int,
user_id int,
rating decimal,
ts int,
primary key(movie_id, user_id)
);
# show all ratings of specific user
CREATE TABLE ratings_by_user (
user_id int,
movie_id int,
rating decimal,
ts int,
primary key(user_id, movie_id)
);
我有 2 个 csv 文件: movies.csv:movie_id;电影名;流派名称
1;Toy Story (1995);Animation|Children's|Comedy
ratings.csv:user_id;电影ID;评分,时间戳
1;1193;5;978300760
将数据导入表的最佳方式是什么? 例如,如何将数据导入到从 movies.csv 设置的流派?如何拆分字符串“动画|儿童|喜剧”? 如果我手动操作:
INSERT INTO movies(movie_id,..., genre) VALUES ('Toy Story (1995)', ...,['Animation','Children's','Comedy'])
但是如何为所有电影导入这些数据?
您能否展示使用此示例/数据库的 COPY 和 INSERT 命令的最佳策略?
【问题讨论】:
标签: postgresql cassandra