要旨
我在我的应用程序中实现了一个喜欢按钮。假设用户能够喜欢其他用户的产品。
问题
我现在想知道以下哪种方法是将这些喜欢存储在非关系数据库(在我的例子中是 MongoDB)中最有效和最健壮的方法。重要的是,没有用户可以喜欢一个产品两次。
可能的解决方案
(1) 存储那些喜欢产品本身的用户 ID,并通过以下方式跟踪喜欢的数量 likes.length
// Product in database
{
likes: [
'userId1',
'userId2',
'userId3',
...
],
...
}
Run Code Online (Sandbox Code Playgroud)
(2) 存储用户自己喜欢的所有产品,并通过产品上的数字跟踪喜欢的数量
// User in database
{
likedProducts: [
'productId1',
'productId2',
'productId3',
...
]
...
}
// Product in database
{
numberOfLikes: 42,
...
}
Run Code Online (Sandbox Code Playgroud)
(3)也许有更好的解决方案?
无论哪种方式,如果产品有很多喜欢或用户喜欢很多产品,则有大量数据,只需加载即可显示喜欢并检查用户是否已经喜欢它。
我正在寻找一种将ActiveResource映射到SimpleDB的方法
我想避免使用插件/宝石,因为我所使用的都是过时/错误/没有混淆
看起来似乎很难,我想知道你是否有人成功实现了一个使用simpleDB作为主动资源的rails应用程序.你是怎么做到的?谢谢.
ruby-on-rails non-relational-database amazon-web-services amazon-simpledb
我将很快开始设计一个Web应用程序,虽然我在SQL世界中有很多经验,但我不知道我需要考虑这样做,目标是在非常近的地方迁移到GAE未来.
或者,我可以从一开始就为GAE设计应用程序,所以在这种情况下,我需要考虑哪些差异?换句话说,为GAE编写应用程序的DO和DON是什么,来自过去的关系数据库.
python google-app-engine web2py non-relational-database relational-database
我曾在关系数据库工作; 但现在想了解图数据库.我才知道这两个是图数据库.这两个数据库有什么区别.我们应该在他们中间选择什么?
database non-relational-database neo4j graph-databases titan
数据库中的最新热点似乎集中在非关系数据库上.为什么?这似乎适得其反.例如,以关系方式表达我的数据对我来说更有意义(Django + SQL中的表示例代码):
class Post(models.Model):
name = models.CharField()
created = models.DateTimeField(auto_now_create = True)
class Comment(models.Model):
text = models.TextField()
post = models.ForeignKey('Post')
created = models.DateTimeField(auto_now_create = True)
Run Code Online (Sandbox Code Playgroud)
SQL:
create table post (id int primary key auto_increment,
name varchar,
created datetime);
create table comment(id int primary key auto_increment,
text text,
post_id int,
created datetime,
foreign key post_id references post(id));
Run Code Online (Sandbox Code Playgroud)
SQL的强大之处在于这些信息中可以表示 这么多的方式.当然,存在整个对象关系映射问题,但我将其视为一个特征,而不是一个问题.使用SQL,我可以获取比昨天更早的给定帖子的所有不同注释,将所有这些注释整理在一起,并生成统计信息.可以为非关系数据库做同样的事情吗?
使用非关系数据库(如MongoDB)似乎也会影响性能,因为您会立即获取整个对象图,而不是您最不需要的对象图.
有人可以向我解释使用非关系数据库的好处是什么?
这个问题已经在 StackOverflow 上问过了,
问的问题可以追溯到 2013 年,现在是 2015 年,Django 快速成长。
截至 2015 年,在 Django 1.8 中使用 mongodb 的情况如何?
Django 是否开箱即用地支持 Monogodb(使用数据库适配器)?还是应该使用像 django-nonrel 这样的其他发行版?
django non-relational-database mongodb django-nonrel django-1.8
我的目标是拥有具有一些基本信息的产品,例如
并且每个产品都可以有基于以下的选项:
我读过几篇文章,但找不到适合我问题的答案,即如何反映所有这些可能的选项组合可以有不同的 SKU、价格和库存数量。另外,我想为不同颜色的产品提供不同的图像。
所以我目前的想法是为所有选项建立单独的集合:
然后为产品文档中的所有这些选项提供指针数组,并且附加数组variations反映选项的每种可能组合并添加SKU,price和stock字段。
{
_id: "12345",
name: "My Product",
...
colors: [
{
_id: "Color_1",
images: [
"http://myserver.com/images/product_12345_1",
"http://myserver.com/images/product_12345_2",
]
},
{
_id: "Color_3",
images: [
"http://myserver.com/images/product_12345_3",
"http://myserver.com/images/product_12345_4",
]
}
],
sizes: [
{
_id: "Size_5"
},
{
_id: "Size_9"
}
],
materials: [
{
_id: "Material_2"
}
],
variations: [
{
color: "Color_1",
size: "Size_5",
material: "Material_2",
SKU: …Run Code Online (Sandbox Code Playgroud) 我们有一个GDBM键值数据库作为负载均衡的面向Web的应用程序的后端,该应用程序是用C++实现的.应用程序提供的数据已经变得非常大,因此我们的管理员已将GDBM文件从"本地"存储(在Web服务器上,或非常接近)移动到大型,共享,远程,NFS挂载的文件系统.
这影响了性能.我们的性能测试(在测试环境中)显示页面加载时间从数百毫秒(对于本地磁盘)跳跃到几秒(通过NFS,本地网络),有时甚至高达30秒.我相信问题的很大一部分是应用程序从GDBM文件中进行大量随机读取,并且这些在NFS上比较慢,而且在生产中会更糟糕(前端和后端都有甚至更差)他们之间的网络硬件更多)和我们的数据库变得更大.
虽然这不是一个关键的应用程序,但我希望提高性能,并提供一些资源,包括应用程序开发人员时间和Unix管理员.我的主要约束是时间只有几周的资源.
在我看来,我的选择是:
通过调整参数来提高NFS性能.我的直觉是我们不会从中得到很多,但之前我错了,而且我对NFS调优并不是很了解.
移动到其他键值数据库,例如memcachedb或Tokyo Cabinet.
用其他协议替换NFS(已提到iSCSI,但我不熟悉它).
我该如何处理这个问题?
基于非关系数据库中的外键属性进行过滤的最佳实践是什么?我知道缺乏join支持会使事情变得更加复杂,所以我想知道别人是如何解决它的.
就我而言,我有属于区域的事件,属于区域.我想过滤给定区域中的所有事件.一个Event具有site属性,是一个外键的Site,这反过来有一个region外键到Region:
region = Region.objects.get(id=regionID)
events = Event.objects.filter(site__region=region)
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为site__region需要a join并且在Google App Engine上运行的django-nonrel不支持.(我得到Caught DatabaseError while rendering: This query is not supported by the database.一个错误.)因此,我一直在迭代事件,添加匹配列表的事件:
events = list()
region = Region.objects.get(id=regionID)
for event in Event.object.all():
if event.site.region==region:
events.append(event)
Run Code Online (Sandbox Code Playgroud)
这是做事的好方法吗?有什么傻事我忽略了吗?提前致谢!
django google-app-engine non-relational-database django-nonrel
database ×4
mongodb ×3
django ×2
django-1.8 ×1
e-commerce ×1
gdbm ×1
key-value ×1
mongoose ×1
neo4j ×1
nfs ×1
nosql ×1
performance ×1
python ×1
titan ×1
web2py ×1