Традиционный SQL против MongoDB / CouchDB для простого приложения на Python - PullRequest
2 голосов
/ 17 июня 2010

Скажем, у меня есть традиционная структура SQL, такая как:

create table tags (id PRIMARY KEY int, tag varchar(100));
create table files (id PRIMARY KEY int, filename varchar(500));
create table tagged_files (tag_id int, file_id int);

Я добавляю несколько тегов:

insert into table tags (tag) values ('places');
insert into table tags (tag) values ('locations');

И некоторые файлы:

insert into table files (filename) values ('/tmp/somefile');
insert into table files (filename) values ('/tmp/someotherfile');

изатем пометьте эти файлы:

insert into table tagged_files (tag_id, file_id) values (1,1);
insert into table tagged_files (tag_id, file_id) values (1,2);

Затем я могу найти все файлы, помеченные первым тегом, примерно так:

select * from files, tagged_files where id = file_id and tag_id = 1

Но как мне сделать то же самое, используя такие решения NoSQL, какMongoDB и CouchDB ??И какой проект NoSQL лучше всего подходит для чего-то подобного?

1 Ответ

1 голос
/ 17 июня 2010

Для MongoDB.

Скорее всего, вы просто сохраните их с тегами:

db.Files.save({ "fn" : "/tmp/somefile", "ts" : [ { "t" : "places" }, { "t" : "locations" }] });
db.Files.save({ "fn" : "/tmp/someotherfile", "ts" : [ { "t" : "locations" }] });

Альтернатива - сохранять теги отдельно (ObjectId - это 12 байтов iirc):

db.Tags.save({ "t" : "places" });
db.Tags.save({ "t" : "locations" });
db.Files.save({ "fn" : "/tmp/somefile", "t" : [ { "i" : ObjectId("IdOfPlaces") }, { "i" : ObjectId("IdOfLocations") }] });

В обоих случаях, чтобы получить файл, это

db.Files.find({ "_id" : ObjectId("4c19e79e244f000000007e0d") });
db.Files.find({ "fn" : "/tmp/somefile" });

Или пара файлов на основе тегов:

db.Files.find({ ts : { t : "locations" } })
db.Files.find({ t : { i : ObjectId("4c19e79e244f000000007e0d") } })

Примеры из консоли Монго. И если вы храните теги с идентификаторами, вам, очевидно, придется читать теги на основе идентификаторов, как только вы получите файл (ы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...