我在一家食品电子商务公司工作,我正在重新设计优惠券服务。
优惠券可以有很多规则,如:
template<typename _Clock, typename _Duration>
cv_status
wait_until(unique_lock<mutex>& __lock,
const chrono::time_point<_Clock, _Duration>& __atime)
{
// DR 887 - Sync unknown clock to known clock.
const typename _Clock::time_point __c_entry = _Clock::now();
const __clock_t::time_point __s_entry = __clock_t::now();
const auto __delta = __atime - __c_entry;
const auto __s_atime = __s_entry + __delta;
return __wait_until_impl(__lock, __s_atime);
}
template<typename _Clock, typename _Duration, typename _Predicate>
bool
wait_until(unique_lock<mutex>& __lock,
const chrono::time_point<_Clock, _Duration>& __atime,
_Predicate __p)
{
while (!__p())
if (wait_until(__lock, __atime) == cv_status::timeout)
return __p();
return true;
}
当前系统处理所有这些规则,每个规则表示为一列是MySQL:http://pastebin.com/6KDC0iC8
然而,由于优惠券的规则将继续变化,我们无法每次都创建列。我们可以吗?有没有办法让它通用而不失去查询的能力,如:
a)for what users it is valid
b)For what restaurants it is valid
c)For what area it is valid
d)min amount
etc etc
我想用mongo db来做这个。有什么建议吗?
答案 0 :(得分:0)
这是我对你的情景的建议。只是我的初步想法,所以如果你想让我详细说明,请告诉我。
如果必须为每个属性创建列,它可能确实不是非常可扩展的。我建议您在单独的表中存储具有一对多或多对多关系的优惠券的属性。
我可以想象这样的情况:
Coupon
id
...
Restaurant
id
...
Area
id
...
CouponsInArea
coupon_id
area_id
CouponRestaurantValidity
coupon_id
restaurant_id
这些可能不会发生太大变化。
某些属性也可能对优惠券有效。你可以用更通用的方式解决这个问题:
CouponProperty
coupon_id
property (a string)
然后您可以通过以类似方式检索来查询:
select coupon properties where coupon_id is coupon.id