我有一个与EF4和SQL Server一起使用并在AppHarbor上托管的现有网站。我需要创建一个独立的版本,个人可以在本地运行,没有Internet连接。我正在考虑删除SQL并将其替换为RavenDB。我认为数据结构很适合这一点。
从高层来看,这是结构
User
- Elections
- People
- Locations
- Ballots
- Votes
网站的每个用户都可以创建一些“选举”。每次选举都是完全独立的,只有创建它的用户以及与之共享的任何“访客”用户都知道。
以下是一些我尚未找到答案的问题:
如何将访问权限仅隔离到当前选定的“选举”?每个linq语句是否需要包含一个“where”子句来限制选举的范围,或者我可以选举“加载”并在“内部”工作吗?我必须使用db.Query<Person>().Where(p=>p.Election==currentElection)
还是可以执行election.Query<Person>()
之类的操作?
每个人最多有六个字段:“Firstname”,“LastName”,“OtherNames”,“ExtraInfo”等我想搜索的内容。我需要经常快速搜索每个人选举在所有这些领域寻找部分匹配。我也想要“soundex”型匹配。索引是否有用,或者我只是使用“强力”并循环遍历所有人?如果选举中有5万人,我可以得到亚秒级的回复吗?
如何构建文档,以便每个用户都可以获取并使用他们的选举列表?在查看选举清单时,我想显示每次选举的摘要信息。应该在User对象中“预先存储”吗?或者,在显示列表时,我是否必须加载每个选举的部分以获取详细信息(例如,人数,选举的某些属性等)。
感谢您提供的任何帮助!
答案 0 :(得分:1)
1)是的,你需要添加where子句。如果您添加自己的扩展方法,则可以election.Query<Person>()
。
2)您想使用索引。你会得到那么快的速度。您可能想了解订单搜索:http://ayende.com/blog/152833/orders-search-in-ravendb
3)您可以根据太多因素查询或存储它。