To pytanie może być istotne dla dowolnej bazy danych opartej na dokumencie NoSQL.Projektowanie "kanału społecznościowego" w DynamoDB
Robię interesującą sieć społecznościową i zdecydowałem się pójść z DynamoDB ze względu na skalowalność i brak czynników związanych z bólem. W bazie danych znajdują się tylko dwie główne jednostki: użytkowników i wpisów.
Wymóg wspólnego odpytuje są bardzo proste:
- feed Home (RSS ludzi Obserwuję)
- mojego kanału/użytkownika (paszy kopalni lub konkretnego kanału użytkownika)
- Lista użytkownika I/user następnie
- Lista zwolenników
Tutaj jest baza danych Schemat I wymyślić tej pory (legenda: __thisIsHashKey
i _thisIsRangeKey
):
timeline = { // post
__usarname:"totocaster",
_date:"1245678901345",
record_type:"collection",
items: ["2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594"],
number_of_likes:123,
description:"Hello, this is cool"
}
timeline = { // new follower
__usarname:"totocaster",
_date:"1245678901345",
type:"follow",
follower:"tamuna123"
}
timeline = { // new like
__usarname:"totocaster",
_date:"1245678901345",
record_type:"like",
liker:"tamuna123",
like_date:"123255634567456"
}
users = {
__username:"totocaster",
avatar_url:"2d931510-d99f-494a-8c67-87feb05e1594",
followers:["don_gio","tamuna123","barbie","mikecsharp","bassman"],
following:["tamuna123","barbie","mikecsharp"],
likes:[
{
username:'barbie',
date:"123255634567456"
},
{
username:"mikecsharp",
date:"123255634567456"
}],
full_name:"Toto Tvalavadze",
password:"Hashed Key",
email:"[email protected]"
}
Jak widać doszedłem-up przechowywania wszystkich mój post bezpośrednio w kolekcji osi czasu. W ten sposób mogę wyszukiwać posty z użyciem daty i nazwy użytkownika (klawisze skrótu i zakresu). Wszystko wydaje się być w porządku, , ale tutaj jest problem::
Nie mogę wykonać zapytania o oś czasu użytkownika za jednym razem. Będzie to jedno z najbardziej poszukiwanych przez system zapytań i nie mogę zapewnić wydajnego sposobu na to. Proszę pomóż. Dzięki.
To jest dla mnie ciągłe pytanie, podczas gdy planuję moją sieć społecznościową – MCKapur
Chcesz mieć możliwość uzyskania wszystkich danych użytkownika z tabeli osi czasu? Możesz po prostu zapytać tylko o skrót do tej nazwy użytkownika? Jeśli tak nie jest, daj mi nieco bardziej szczegółowy przykład zapytania, może w prostej składni podobnej do SQL. tj. 'WYBIERZ wszystko z osi czasu, gdzie USERNAME = totacaster' – greg