我想问一个设计问题,关于如何最好地为我想要具有可搜索字段的对象构造一个类,包括可以作为对象的字段,也可以是模块化的,从某种意义上说,可以基于数据库中的新条目添加字段。让我澄清一下:
假设我有一个对象类型Car。该汽车具有诸如制造商,型号,颜色,最高速度之类的属性,可以通过诸如字符串和双打等简单类型来表示。但是它也可能包含更复杂的信息,例如具有CarPowerProfile类型的属性(一个单独的对象),拥有一个方程式,该方程式将车辆的动力输出描述为油门的函数。或其他子对象。
设计此类的最佳方法是什么,这样我不仅可以搜索数据库,不仅可以查找颜色,品牌和型号等简单属性,还可以搜索“找到一辆拥有70%至90%的蓝色的汽车” 30%油门的功率输出”?问题是,我需要对象执行计算以获取该信息,并且数据库仅存储方程式的系数。
另外,假设有人想向对象添加一个属性(除了硬编码的“基本属性”),如何最好地实现这一点,以便新属性既存在于数据库中又包含在加载的对象中?最后,此问题最适合关系数据库或非关系数据库吗?请记住,这将是将与Web服务同步的独立应用程序。
我意识到我提出了很多要求,但是我不是在寻找代码讲义,而是在寻找如何设计解决方案的更多内容-这就是为什么我使用文字而不是代码来描述问题的原因。我来自数值计算领域,这种软件设计对我来说是陌生的。我对是否有类似(或类似)或类似方法的设计模式感兴趣,因为我没有正确解决问题。
谢谢!
有几种方法可以解决此问题,无论您是针对读写还是针对优化进行优化,它们基本上都会落空。
如果仅通过将核心值保存在数据库中来优化写入,则查询将变得更加昂贵,因为您将必须从数据库中加载所有对象,然后进行计算以过滤它们。
另一方面,如果通过将计算出的值存储在数据库中来优化读取,则写入速度会变慢,因为在每次写入之前,您必须重新计算所有值,然后将所有正确的值写入数据库。
在您要解释的情况下,我会尝试找到一个平衡点。将所有核心值存储在数据库中,还将少数几个计算出的核心值存储在数据库中,您希望这些查询最多运行。然后,您可以对它们进行过滤,然后在应用程序服务器上对其进行进一步过滤。如果做得对,您将获得一个良好的平衡。
如果使用的是ORM(例如NHibernate或EntityFramework),则可以使用LINQ轻松查询多个表。
至于是否应该使用关系型,如果要拥有灵活的架构,则NoSQL解决方案可能更适合。但是NoSQL也有一些缺点。您必须对(反)标准化应用与计算所得属性相同的权衡,请记住,这在NoSQL数据库中非常重要。
像RavenDB这样的NoSQL解决方案已经针对.NET进行了特别优化,该解决方案特别针对.NET进行了优化,可让您定义Map Reduce查询,该查询提供了非常快速的查询访问权限,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句