小编phi*_*lks的帖子

缓存EAV数据 - XML还是NoSQL/MongoDB?

我正在构建一个Web应用程序,它严重依赖于EAV模式来存储数据.这基本上意味着对象的每个属性在海量数据库表中都有自己的行.我正在使用MySQL存储所有内容.这是我存储的一个非常简单的例子......

OBJECTS              ATTRIBUTES

objId | type         objId | attribute | value
=============        =========================
1     | fruit        1     | color     | green 
2     | fruit        1     | shape     | round
3     | book         2     | color     | red
Run Code Online (Sandbox Code Playgroud)

我知道有些人讨厌EAV,但我需要能够在不修改数据库模式的情况下随意添加新的对象属性,到目前为止它对我来说非常有用.

正如我想其他人在使用EAV数据结构构建系统时发现的那样,这种方法的缺点是将多个对象与每个对象的属性一起检索.目前我的应用程序一次只显示10个对象,所以我只查询我的EAV表10次(每个对象一次),它仍然非常快.但是,我想删除此限制并允许一次获取数百个对象.我还希望能够以比我目前更灵活的方式查询对象.

使用SQL连接执行此操作将是可怕的,因此我正在考虑缓存数据.平均而言,数据库每写1次就会获得大约300次读取,所以我认为这是缓存的一个很好的候选者.

到目前为止,这些是我提出的选择......

  1. XML数据库列:每次执行写入时,都会更新包含所有对象属性的对象表中的XML文本列.这可以快速读取数据,但是查询隐藏在数据库表中的XML数据很麻烦.

  2. XML文件:每次执行写入操作时,都会将XML文件写入磁盘,其中包含每个对象及其属性.这样做的好处是我可以使用XQuery来查询对象.

  3. NoSQL(例如MongoDB):也许我应该在像MongoDB这样的无模式数据库上构建系统.重写整个应用程序以使用MongoDB会非常耗时,但令我震惊的是我可以将它用作缓存.因此,例如,每次将数据写入EAV存储时,等效对象将在MongoDB中更新,然后将其用于读取和查询.

最初我认为XML文件是最好的方法,但我可以看到文件变得非常庞大且难以管理.目前我倾向于使用MongoDB.我知道为一个应用程序运行两个数据库服务器似乎很疯狂,但我认为它可以在我的情况下工作.

我很想听听你对此的看法.

caching mongodb nosql entity-attribute-value

7
推荐指数
1
解决办法
1508
查看次数

ASP.Net:在代码隐藏的基础上向 Page_Load 添加附加代码

我正在尝试向 ASP.Net 页面的 Page_Load 方法添加几行额外的代码,其中现有的 Page_Load 代码存储在已编译的代码隐藏 DLL 中。尽管我可以使用 Dis# 提取 Page_Load 方法的代码,但我无权访问 DLL 的源代码。

添加新代码的最佳方法是什么?我需要将现有的 Page_Load 代码与新代码一起执行,并且它们的执行顺序并不重要。

具体来说,我正在修复一个使用 Telerik RadEditor 的旧应用程序,该应用程序在 Firefox 6 下无法正常工作。有关我添加的确切代码,请参阅此页面。

.net c# asp.net

5
推荐指数
1
解决办法
4204
查看次数

标签 统计

.net ×1

asp.net ×1

c# ×1

caching ×1

entity-attribute-value ×1

mongodb ×1

nosql ×1